我有一个字符串,用于从文件名中删除括号。
$ find . -name "*.mkv" -exec rename 's/[\)\(]//g' {} \;
我是Linux和Shell脚本的新手。我已经做出了一条声明,该声明删除了目录文件名中的所有()。但是,当我遇到诸如“ amazing。(2018)”之类的目录时,它显示错误,找不到目录。
请提供我需要的其他替代方法。并且我希望它是递归的。
预先感谢
答案 0 :(得分:0)
更好的呼叫sed
:
find . -type f -iname "*.mkv" | \
while IFS= read -r line; \
do mv "$line" "$(printf %s "$line" | sed -re 's/(\[|\])//g')"; done;
输入:
'1[a].mkv' '2[a].mkv' '3[a].mkv'
输出:
1a.mkv 2a.mkv 3a.mkv
答案 1 :(得分:0)
确保使用“ -depth”参数运行“ find”, 因此,叶子先被重命名, 即目录名称已更改 仅在之后重命名其中的所有文件和目录。
否则,如果您首先更改目录名称, 其中的文件和目录不再可访问 (它们不在开始时“找到”的列表中。)