我有一些文件
"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