xargs: неопределенная цитата - PullRequest
3 голосов
/ 18 февраля 2011

Я пытаюсь преобразовать некоторые файлы .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 Ain't Saying Nothin'.flac".

Какие уловки, чтобы заставить это работать?

- Решено только с поиском - находить . -type f -name "* .flac" -exec ffmpeg -i {} -ab 192k -acodec libmp3lame -ac 2 {} .mp3 \;

Ответы [ 3 ]

4 голосов
/ 20 февраля 2011

Использовать 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 голос
/ 13 сентября 2013

Некоторые версии xargs поддерживают собственный разделитель.Если это так, просто добавьте -d'\n', чтобы указать, что символ новой строки должен использоваться для разделения элементов (что обычно имеет смысл).

В этом случае вы будете использовать его следующим образом:

# find files_containing_quotes/ | xargs -d'\n' -i{} echo "got item '{}'"
1 голос
/ 18 февраля 2011

Из справочной страницы 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

...