使用 cut 以及 find 和 exec 时转义特殊字符
Escape special characters while using cut along with find and exec
我必须对单个文件夹中的多个文件执行以下操作:
Remove "01 " like part from file names like "01 x y z.mp3".
为此,我构建了以下命令:
find . -name '*.mp3' -exec sh -c "mv "{}" `echo "{}" | cut -d' ' -f2-`" \;
但是在执行上述命令时出现以下错误:
sh: 1: Syntax error: "(" unexpected
sh: 1: Up.mp3: not found
第一个错误是由于文件名中存在“(”字符,第二个错误是由于文件名为“03 Up&Up.mp3”。所以在这两种情况下,错误都是因为 sh 无法转义特殊字符。
请提出适当的更改以正确执行上述操作。
应该是:
find -name '*.mp3' -exec bash -c 'mv "{}" "$(cut -d" " -f2- <<< "{}")"' \;
使用rename
工具
rename 's/^[0-9]+ //' *.mp3
请注意,这不是所有 linux 发行版中的标准工具,而是指最初由 Larry Wall 编写的 perl 脚本。请参阅 man rename
以检查您的系统中可用的内容。
它通过转义 {} 上使用的 "" 来工作:
找到。 -name '*.mp3' -exec sh -c "mv \"{}\" echo \"{}\" | cut -d' ' -f2-
" \;
@lurker 建议
我必须对单个文件夹中的多个文件执行以下操作:
Remove "01 " like part from file names like "01 x y z.mp3".
为此,我构建了以下命令:
find . -name '*.mp3' -exec sh -c "mv "{}" `echo "{}" | cut -d' ' -f2-`" \;
但是在执行上述命令时出现以下错误:
sh: 1: Syntax error: "(" unexpected
sh: 1: Up.mp3: not found
第一个错误是由于文件名中存在“(”字符,第二个错误是由于文件名为“03 Up&Up.mp3”。所以在这两种情况下,错误都是因为 sh 无法转义特殊字符。
请提出适当的更改以正确执行上述操作。
应该是:
find -name '*.mp3' -exec bash -c 'mv "{}" "$(cut -d" " -f2- <<< "{}")"' \;
使用rename
工具
rename 's/^[0-9]+ //' *.mp3
请注意,这不是所有 linux 发行版中的标准工具,而是指最初由 Larry Wall 编写的 perl 脚本。请参阅 man rename
以检查您的系统中可用的内容。
它通过转义 {} 上使用的 "" 来工作:
找到。 -name '*.mp3' -exec sh -c "mv \"{}\" echo \"{}\" | cut -d' ' -f2-
" \;
@lurker 建议