在 Mac OS 中删除多个文件名中特定字符后面的所有字符

在 Mac OS 中删除多个文件名中特定字符后面的所有字符

尝试找到一个脚本或应用程序,该脚本或应用程序可以按照正确的格式批量删除文件名混乱。

例如这个练习[2009]先前版本.png进入这个练习[2009].png

我需要所有文件中的最后一个字符为“]”或年份/日期,同时保留文件扩展名。

我尝试过一些脚本,例如:

rename ’s/_[^_]*//‘ *.png

或者

for file in *.png; do mv "$file" "$(echo "$file" | sed ’s/\.[^.]*$//‘)”; done

这要么不起作用,要么只是删除最后一个“。”后的文件扩展名。

我基本上不确定我是否在脚本中更改了正确的字符,或者这些是否是最好的字符。

答案1

像这样,使用Perl 的rename

$ rename 's/(.*\]).*/$1.png/' *.png 

答案2

这是我在其他地方找到的解决方案,适用于任何指定的字符。它会在命令的 3 个部分中查找您指定的字符的最后一个出现位置,将其以及文件扩展名之前的所有内容删除,然后重新添加指定的字符。

find . -name '*1984*' -type f -exec sh -c 'mv "$1" "$(echo $1 | sed -E "s/1984(.*)(\.[^\.]+)$/1984\2/")"' _ {} \;

这个特殊的例子以年份“1984”为关键字,因此“Exercise 1984 previous version.png”变成了“Exercise 1984.png”。

特殊字符(例如“]”)在 3 个部分中都需要在前面加上“”

相关内容