在bash中使用一个内核(使用perl或awk)来更改多个文件的扩展名?

1 unix bash shell perl awk

在bash shell中重命名一堆文件最简单的方法是什么?要将*.ext当前目录中的每个文件重命名为*.otherext?我对使用perl或awk的解决方案持开放态度,不必是纯粹的bash.有任何想法吗?

要明确这意味着:

mv a.ext a.otherext
mv b.ext b.otherext
...
etc. for all *.ext
Run Code Online (Sandbox Code Playgroud)

mel*_*ene 10

有几种方法可以做到这一点.有一个rename用Perl编写的程序:

rename 's/\.ext\z/.otherext/' *.ext
Run Code Online (Sandbox Code Playgroud)

但是还有另一个(不兼容的)rename程序,你必须这样做:

rename .ext .otherext *.ext
Run Code Online (Sandbox Code Playgroud)

还有一个名为的程序mmv:

mmv '*.ext' '#1.otherext'
Run Code Online (Sandbox Code Playgroud)

使用普通bash:

for i in *.ext; do mv -- "$i" "${i%.ext}.otherext"; done
Run Code Online (Sandbox Code Playgroud)

使用普通perl:

perl -we 'for my $old (glob "*.ext") { (my $new = $old) =~ s/\.ext\z/.otherext/; rename $old, $new or warn "$old -> $new: $!\n"; }'
Run Code Online (Sandbox Code Playgroud)

  • 普通Bash版本的+1.顺便说一句,不是使用`--`,而是使用`./*.ext`而不是`*.ext`来选择要迭代的文件. (2认同)