Я ищу способ заставить find и xargs (GNUWin32, под Win7, обе программы в версии 4.1) играть вместе с именами файлов, которые содержат пробелы.
Получение имен файлов в xargs как один был один вызов, но я , кажется , не найти никакой возможности получить их в одно целое. К сожалению, xargs снимает кавычки, что бы я ни пытался.
Это заставляет lame (который вызывается из xargs) жаловаться на лишние аргументы, так как имена файлов содержат пробелы.
Да, мне известно о параметре find 's -exec (который будет работать без xargs), я явно не заинтересован в этом, поскольку я хочу запустить 8 параллельных экземпляров lame для пакетной задачи, требующей большого объема вычислений (примерно перекодировать 1800 192 кбит / с аудиокниг mp3, чтобы они поместились на карту micro-sd моего плеера). То есть xargs -P 8 .
Эта команда:
find . -name "*.mp3" -printf "\"%P\" --abr 52 -q 0 --silent \"conv/%P\" " | xargs -n 7
выведет что-то похожее на:
path/01.01 foo bar.mp3 --abr 52 -q 0 --silent conv/path/path/01.01 foo bar.mp3
... в котором по-прежнему отсутствуют кавычки, поэтому, если я поставлю lame в конце этой команды, он будет рассматривать path/01.01 как input, foo как output и жаловаться на наличие лишнего аргумента bar.mp3 .
- Я попытался добавить апострофы (вокруг кавычек и внутри них), но `xargs 'также удаляет их.
-print0тоже не подойдет (по крайней мере, для всего, что я пробовал).- Я пытался симулировать
-print0сprintfи\0, но безрезультатно. - Тем временем я играю с идеей перенаправить вывод в файл и добавить кавычки с помощью текстового редактора ...
