2015-08-04 6 views
2

Я пытаюсь пройти дорожки с пробелами, используя трубу. однако целевая команда ожидает, что входные пути будут указаны. как это можно сделать?пути переноса с пробелами по трубе unix

вот моя попытка (всего лишь пример внимания проблемы):

find /Applications/Google\ Chrome.app/ | xargs egrep -v goog 

получить задать расширенное пути расщеплены из белого пространства

egrep: /Applications/Google: No such file or directory 
egrep: Chrome.app/: No such file or directory 

любая идея, как решить эту проблему?

ответ

2

На странице человека для xargs:

командной строки для команды застроен, пока она не достигнет системообразующую де- оштрафовал предела (если не используются -n и -L опции). Указанная команда будет вызываться столько раз, сколько необходимо для использования списка элементов ввода. В общем, будет много меньше вызовов команды , чем были элементы на входе. Это, как правило, имеет значительные преимущества в производительности. Некоторые команды могут быть полезны exe- , вырезанные параллельно; см. параметр -P.

Поскольку имена файлов Unix могут содержать пробелы и символы новой строки, это поведение по умолчанию часто бывает проблематичным; имена файлов, содержащие пробелы, и/или новые - строки неправильно обрабатываются xargs. В этих ситуациях лучше использовать опцию -0, которая предотвращает такие проблемы. При использовании этой опции вам необходимо убедиться, что программа, которая производит вход для xargs, также использует нулевой символ в качестве разделителя. Если программа - это поиск GNU, например, опция -print0 делает это за вас.

Пробег: find /Applications/Google\ Chrome.app/ -print0 | xargs -0 egrep -v goog.

+0

Да, это именно то, что я искал. благодаря – Zohar81

Смежные вопросы