在一个目录中,我有一堆
我该怎么做呢? 我使用Bash shell。
*.html
文件。我想把它们全部重命名为*.txt
。我该怎么做呢? 我使用Bash shell。
*.html
文件。我想把它们全部重命名为*.txt
。for file in *.html
do
mv "$file" "${file%.html}.txt"
done
以下代码可行且不需要系统拥有 rename
程序(尽管大多数系统通常都有这个程序):
对于更好的解决方案(只使用bash功能,而不是外部调用),请参见其他答案之一。
for file in *.html; do
mv "$file" "$(basename "$file" .html).txt"
done
编辑:如评论所指出,如果文件名中含有空格,则没有进行适当引用将无法正常工作(现已添加)。当仅处理您自己知道文件名不包含空格的文件时,这将起作用,但每当您编写可能在以后重复使用的内容时,请不要忽略适当的引用。
ren *.a *.b
。 - Muhammad Umer$()
语法,而不是传统的反引号语法。这样可以提高可读性,并且当您需要在命令替换中使用需要反斜杠转义才能成为字面值的字符时,使语法更加清晰明了。 - Charles Duffyrename 's/\.html$/\.txt/' *.html
完全符合你的要求。
rename 's/jpg/png/' *.jpg
,这样更容易记忆和输入。如果有文件名包含 jpg,则可能会导致错误,因此在输入之前我会先检查一下。 - ramwin这对我在OSX上从.txt到.txt_bak的转换有效。
find . -name '*.txt' -exec sh -c 'mv "$0" "${0%.txt}.txt_bak"' {} \;
.txt
变成.txt_bak
,你只需要连接_bak
;) - corwin.amber.scss
重命名为.sass
(在原地转换后...):find . -name '*.scss' -exec sh -c 'mv "$0" "${0%.scss}.sass"' {} \;
- Frank N你想使用rename
命令:
rename -S <old_extension> <new_extension> <files>
rename -S .html .txt *.html
这正好做到了你想要的——它将会把所有匹配*.html
的文件的扩展名从.html
更改为.txt
。
注意:Greg Hewgill 正确指出这不是一个 bash 内置命令;而是一个单独的 Linux 命令。如果你只需要在 Linux 上使用,那么这应该能很好地工作;如果你需要更跨平台的东西,请看看其他答案中的一个。
rename
程序与 bash
没有关联,并且也不支持所有平台。我只在 Linux 上看到过它。 - Greg Hewgillrename -S .html .text *.html
,其中-S
代表--subst-all
。 - Marek Sebera对于Ubuntu用户:
rename 's/\.html$/\.txt/' *.html
这是我在OSX和Linux上找到的最简洁的解决方案,而且它也可以很好地与git一起使用!
find . -name "*.js" -exec bash -c 'mv "$1" "${1%.js}".tsx' - '{}' \;
同时,与git一起使用:
find . -name "*.js" -exec bash -c 'git mv "$1" "${1%.js}".tsx' - '{}' \;
xargs
,您只需添加-P 10
即可将命令分叉为最多10个并发进程。非常适合处理大型目录。使用ls -1
只是如何向xargs
提供输入的示例 - 您也可以将其与find一起使用。 - Christian Bongiorno这个问题明确提到了Bash,但如果你恰好有ZSH可用,那么它就非常简单:
zmv '(*).*' '$1.txt'
如果你看到zsh: command not found: zmv
,那么只需运行:
autoload -U zmv
然后再试一遍。
感谢这篇原始文章提供了关于zmv的技巧。
zmv '(*).html' '$1.txt'
翻译为中文。 - Alf Eatonfind . -depth -name "*.html" -exec sh -c 'mv "$1" "${1%.html}.txt"' _ {} \;
"${file%.*}.txt"
,但对于没有扩展名的文件来说可能存在危险。 - Jess$
符号! - doug65536--
"运算符":mv -- "$file" "${file%.html}.txt"。该运算符可以防止以 '-' 开头的文件名被 mv 解析为参数。 - rcreswick