Я ищу способ заставить 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
, но безрезультатно. - Тем временем я играю с идеей перенаправить вывод в файл и добавить кавычки с помощью текстового редактора ...