'найдите' с 'xargs'

Рассмотрите:

cat fileNames.txt | xargs find . -name

Я ожидаю, что вышеупомянутая команда найдет путь каждого имени файла в fileNames.txt, но эта команда не производит вывода. Почему?

1
задан 08.12.2017, 01:49

4 ответа

Решение было бы:

 xargs --max-args=1 find . -iname < fileNames.txt
4
ответ дан 12.12.2019, 07:48

Постоянный клиент xargs вызов удаляет символы новой строки, помещая все строки от входа в единственной командной строке. Можно однако использовать -I <pattern> опция, где команду назовут для каждой строки входа, с <pattern> замененный содержанием строки.

Отметьте также, который необходимо, вероятно, добавить -print опция перечислить пути.

cat fileNames.txt | xargs -I {} find . -name {} -print
3
ответ дан 12.12.2019, 07:48

-name опция берет просто отдельный аргумент. Я не уверен, почему Вы не получаете сообщение об ошибке. Попробовать

sed 's/.*/-name "&"/' fileNames.txt | xargs find .
1
ответ дан 12.12.2019, 07:48

Ответам до сих пор приходится нелегко с именами файлов, содержащими пространство, 'или ":

$ echo \'\ \" |  xargs -I {} find . -name {} -print
xargs: unmatched single quote; by default quotes are special to xargs unless you use the -0 option

$ echo \'\ \" | sed 's/.*/-name "&"/' | xargs find .
xargs: unmatched double quote; by default quotes are special to xargs unless you use the -0 option
find: missing argument to `-name'

Если файлы будут сделаны пользователями, то Вы испытаете забавные именованные файлы. Если Вам установили Параллель GNU, можно сделать:

cat fileNames.txt | parallel find . -name {} -print

Посмотрите вводное видео для получения дополнительной информации о Параллели GNU: http://www.youtube.com/watch?v=OpaiGYxkSuQ

Параллель GNU можно загрузить по ftp://ftp.gnu.org/gnu/parallel/ и, как сообщали, работала под Cygwin.

1
ответ дан 12.12.2019, 07:48

Теги

Похожие вопросы