0

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

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

4

4 回答 4

3

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

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

如果文件不只是pngs 则使用它(扩展名不可知),假设扩展名为 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")
于 2012-04-20T10:07:36.190 回答
1

您不需要脚本;尝试mmv

mmv "*.png" "#1~ipad.png"
于 2012-04-20T13:22:04.357 回答
0

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

prename 's/x2\.png/2x~ipad.png/' *.png
于 2012-04-20T16:57:27.637 回答
0

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

于 2012-04-20T10:06:08.890 回答