使用bash shell重命名多个文件名

时间:2012-04-20 10:03:03

标签: bash shell

我们有错误的文件名,如file1@x2.png,它应该像file1@2x~ipad.png。

不确定这是否适合我提出这个问题。如何编写简单的bash shell脚本,将这样的文件名从错误转换为预期的。

4 个答案:

答案 0 :(得分:3)

使用 bash ,虽然这可以很容易地翻译成sh / POSIX

for file in *; do
    [[ "$file" =~ @2x~ipad\.png$ ]] || mv "$file" "${file%@*}@2x~ipad.png"
done

如果文件不仅仅是png s,则使用此(扩展不可知),假设扩展名为3个字符。

for file in *; do
    [[ "$file" =~ @2x~ipad\.[[:alpha:]]{3}$ ]] || mv "$file" "${file%@*}@2x~ipad.${file##*.}"
done

如果这些文件没有在某个目录下分组,那么在指定的根目录下以递归方式尝试find

while read -r file; do
    [[ "$file" =~ @2x~ipad\.[[:alpha:]]{3}$ ]] || mv "$file" "${file%@*}@2x~ipad.${file##*.}"
done < <(find /path/to/root/dir/to/look/under -type -f -name "*.png")

答案 1 :(得分:1)

你不需要脚本;试试mmv

mmv "*.png" "#1~ipad.png"

答案 2 :(得分:0)

mv file1@x2.png file1@2x~ipad.png 您可以使用man mv获取帮助。

答案 3 :(得分:0)

您可以使用prenameperl附带)轻松地为大量文件执行此操作:

prename 's/x2\.png/2x~ipad.png/' *.png