在 bash shell 中重命名一堆文件的最简单方法是什么?*.ext
要将当前目录中的每个文件重命名为*.otherext
? 我对使用 perl 或 awk 的解决方案持开放态度,不必是纯 bash。有任何想法吗?
明确地说,这意味着:
mv a.ext a.otherext
mv b.ext b.otherext
...
etc. for all *.ext
有几种方法可以做到这一点。有一个rename
用 Perl 编写的程序:
rename 's/\.ext\z/.otherext/' *.ext
但是还有另一个(不兼容的)rename
程序,你必须这样做:
rename .ext .otherext *.ext
还有一个程序叫做mmv
:
mmv '*.ext' '#1.otherext'
使用普通 bash:
for i in *.ext; do mv -- "$i" "${i%.ext}.otherext"; done
使用普通 perl:
perl -we 'for my $old (glob "*.ext") { (my $new = $old) =~ s/\.ext\z/.otherext/; rename $old, $new or warn "$old -> $new: $!\n"; }'
既然您询问了 Python 版本的外观,我想我会为后代添加它。
#!/usr/bin/python
from glob import glob
from os import rename
for f in glob("*.ext"):
rename(f, f[:-3] + "otherext")
单行版本(不那么好看):
python -c "import glob,os;[os.rename(f, f[:-3] + \"otherext\") for f in glob.glob(\"*.ext\")]"
一条蟒蛇单线:
python -c "import shutil, glob; [shutil.move(i,i.replace('.txt','.ext')) for i in glob.glob('*.txt')]"
利用 ' 和 " 而不是转义字符和替换功能