我正在尝试使用这个 bash 脚本执行以下操作,但我已经解脱了......
1) 在/usr/incoming/目录中查找所有扩展名为 .mp3 的文件
2) 使用 eyeD3 去除所有现有的 ID3 标签
3) 使用 eyeD3 将标题标签“NEW NAME”写回文件
4) 使用 mv 将每个扩展名为 .mp3 的文件重命名为 latest.mp3,然后强制将其移动到 usr/complete 目录(这样它将覆盖任何其他同名文件)。强>
除了最后一位(第 4 位)之外,一切都在工作。
我知道我在使用 mv 命令时做错了什么,但我不确定是什么。
代码如下:
find /usr/incoming/ -name '*.mp3' \
-exec eyeD3 --remove-all -t 'NEW NAME' '{}' \; \
-exec mv -f '*.mp3' latest.mp3 /usr/complete \;
任何人都可以告诉我我方法的错误吗? ;)
最佳答案
将稍后命令中的 *.mp3
更改为 {}
,以传入您刚刚标记的文件的显式名称。 mv
将拒绝在一次调用中将多个文件重命名为相同的名称——当传递两个以上的参数时,它要求最后一个是一个目录——无论如何,作为参数给出的任何东西find 的 -exec
作为文字参数传递,而不是通过 shell,因此不会扩展 glob,不会处理重定向等,除了 find 自己的特殊字符串,例如 {}
。
find /usr/incoming/ -name '*.mp3' \
-exec eyeD3 --remove-all -t 'NEW NAME' {} ';' \
-exec mv -f {} /usr/complete/latest.mp3 ';'
关于linux - 使用 Bash 重命名和移动通配 rune 件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24235772/