Рассмотрите:
cat fileNames.txt | xargs find . -name
Я ожидаю, что вышеупомянутая команда найдет путь каждого имени файла в fileNames.txt, но эта команда не производит вывода. Почему?
Постоянный клиент xargs
вызов удаляет символы новой строки, помещая все строки от входа в единственной командной строке. Можно однако использовать -I <pattern>
опция, где команду назовут для каждой строки входа, с <pattern>
замененный содержанием строки.
Отметьте также, который необходимо, вероятно, добавить -print
опция перечислить пути.
cat fileNames.txt | xargs -I {} find . -name {} -print
-name
опция берет просто отдельный аргумент. Я не уверен, почему Вы не получаете сообщение об ошибке. Попробовать
sed 's/.*/-name "&"/' fileNames.txt | xargs find .
Ответам до сих пор приходится нелегко с именами файлов, содержащими пространство, 'или ":
$ 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.