我有很多文件夹,里面有 1 个文件,需要批量重命名才能删除它
-(样本)
所以
文件名-(样本).mp3
变成
文件名.mp3
他们的父文件夹有(样本)最后我也可以删除(样本)通过运行以下命令在文件夹上:
find . -name '*\(sample)*' | while read f; do mv "$f" "${f//\(sample)/}"; done
当我第二次再次运行它时,它会从包含的文件名中删除(样本)(但在第一次运行时不会。)
所以我只剩下
文件名-.mp3
将连字符添加到我输入的代码中,如下所示
'*\-(sample)*'
不起作用。
我一整天都在网上尝试了很多其他方法,但没有任何效果,服务器无法识别某些命令,例如“重命名”。
我试图避免下载几千个这样的示例文件来在本地更改文件名,这是我可以做的。
服务器运行的是 Debian。
但我不知道,也许会离开-.mp3会好吗?看起来有点草率和奇怪?我读过在文件名开头留下连字符可能会导致问题,所以另一端可能相同吗?
我可以很好地遵循说明(并且总是会首先研究答案以更好地理解),但我不是专家,所以请记住这一点。
如果有人有任何其他建议那就太好了。我可以从文件夹/文件名中删除任何我想要的内容,除了连字符。
谢谢!
答案1
首先,从最低(最深)的匹配开始find
- 否则您可能会重命名父目录,并且以下重命名可能会失败,因为您不再在那里找到子目录和文件。第二个rename
是(恕我直言)更简单的工具。第三直接通过执行find
。
find -depth -name '*-(sample)*' -exec rename --nopath 's:-\(sample\)::' '{}' +
如果您想先测试,请用作-n
选项rename
- 它将进行试运行并显示更改。需要该--nopath
选项以确保您不会首先重命名前面的目录。