从Linux中所有文件名中删除括号

时间:2018-08-21 18:23:02

标签: linux bash shell

我有一个字符串,用于从文件名中删除括号。

$ find . -name "*.mkv" -exec rename 's/[\)\(]//g' {} \;

我是Linux和Shell脚本的新手。我已经做出了一条声明,该声明删除了目录文件名中的所有()。但是,当我遇到诸如“ amazing。(2018)”之类的目录时,它显示错误,找不到目录。

请提供我需要的其他替代方法。并且我希望它是递归的。

预先感谢

2 个答案:

答案 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”, 因此,叶子先被重命名, 即目录名称已更改 仅在之后重命名其中的所有文件和目录。

否则,如果您首先更改目录名称, 其中的文件和目录不再可访问 (它们不在开始时“找到”的列表中。)

相关问题