使用未知字符串长度的重命名

使用未知字符串长度的重命名

我有一些文件

"file 1 [EN MR RE EF SF DS DE].txt"
"file 2 [EN MR].txt"
"file 3 [EN MR RE EF].txt"

我想用它rename删除该[ * ]部分。

我试过了:

rename  -n 's/\[*]//g' *.mkv

rename不适用于*所以我陷入困境。

输出应该是

"file 1.txt"
"file 2.txt"
"file 3.txt"

谢谢

答案1

基于 perlrename的命令的s操作符采用常用表达不是 shell 通配符。任何字符零次或多次的正则表达式是.*,而不是*。此外,[]具有特殊含义,如果希望它们逐字匹配,则必须进行转义。所以:

$ rename -n 's/ \[.*\]//' file*.txt
rename(file 1 [EN MR RE EF SF DS DE].txt, file 1.txt)
rename(file 2 [EN MR].txt, file 2.txt)
rename(file 3 [EN MR RE EF].txt, file 3.txt)

-n一旦您对建议的替换感到满意,请将其删除。

答案2

您还可以使用循环和标准实用程序mv

for i in *.txt; do
  mv "$i" "${i% [*}.txt"
done

相关内容