我正在尝试将一些.flac文件转换为.mp3,我可以将其导入iTunes。我尝试使用find,xargs和ffmpeg,但是xargs给了我一个未终止的引用错误(因为我在文件名中有引号)。
那是我的命令行:
MacKassner:Geto Boys kassner$ find . -type f | egrep "\.flac$" | xargs -I {} ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {}.mp3
它停止并在文件名中引发错误“Talkin'Loud is not say Nothin'.flac”。
使这个有用的一些技巧?
- 解决了只有找到 - 找 。 -type f -name“* .flac”-exec ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {} .mp3 \;
答案 0 :(得分:4)
使用GNU Parallel。它专门为此目的而构建:
MacKassner:Geto Boys kassner$ find . -type f | egrep "\.flac$" | parallel ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {}.mp3
您可能还想使用{。}。mp3来摆脱.flac:
MacKassner:Geto Boys kassner$ find . -type f | egrep "\.flac$" | parallel ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {.}.mp3
观看介绍视频以了解详情:http://www.youtube.com/watch?v=OpaiGYxkSuQ
答案 1 :(得分:1)
来自egrep联机帮助页:
-Z, --null
Output a zero byte (the ASCII NUL character) instead of the character that normally follows a file
name. For example, grep -lZ outputs a zero byte after each file name instead of the usual newline.
This option makes the output unambiguous, even in the presence of file names containing unusual
characters like newlines. This option can be used with commands like find -print0, perl -0, sort -z,
and xargs -0 to process arbitrary file names, even those that contain newline characters.
因此,将-Z与egrep一起使用,将-0与xargs
一起使用答案 2 :(得分:1)
某些版本的xargs支持自定义分隔符。如果是这种情况,就像添加-d'\n'
一样简单,以指示应该使用换行符来分隔项目(这通常是有意义的)。
在这种情况下,您可以按如下方式使用它:
# find files_containing_quotes/ | xargs -d'\n' -i{} echo "got item '{}'"