Когда я набираю что-то вроде:
find . -name *foo* | ls -lah
он возвращает тот же результат, что и простая ls
команда, как если бы он не имел ввода.
Тем не мение:
ls -lah $( find . -name *foo* )
работает хорошо, но только когда у find
команды есть результаты.
Можно ли пайп к ls
?
bash
command-line
ls
pipe
Lasall
источник
источник
Ответы:
Вы можете использовать
-exec
сfind
командой.источник
find . -name '*foo*' -exec ls -lah {} +
Это должно работать.
источник
-exec +
(или-exec \;
).xargs
Безопасно использовать только с этой-0
опцией, что означает, что вы должны указывать любую команду, которую вы передаете,xargs
чтобы разделить элементы NULL-байтами (\ 0). С помощьюfind
вы можете сделать это с-print0
. xargs -0 и find -print0 не являются стандартными, но -exec есть, поэтому, если переносимость когда-либо будет проблемой, используйте find с -exec.Попробуй это:
источник
Используйте это: (ls может сортировать, работает с именами файлов с пробелами или необычными символами)
find . -name *foo* -print0 | xargs -0 ls -lah
«-print0» означает, что имена файлов, такие как,
file foo 1
будут получать выходные данные сfind
последующим нулем. Аргумент "-0" для xargs указывает на то, что он ожидает такого рода ввода, поэтому имена файлов с пробеламиls
правильно передаются команде.xargs
Строительство в некоторых отношениях лучше , чем ,find etc -exec ls {} \;
потому что все имена файлов будут посланыls
сразу, так что если вы хотите , чтобы отсортировать их все метки времени (используяls
), что - то вроде этого произведения:find . -iname *pdf -print0 | xargs -0 ls -ltr
В системе NetBSD «-printx» также является опцией (мне кажется, это полезный аргумент, но как бы то ни было, у нас есть xargs -0, и это нормально):
find . -name *foo* -printx | xargs ls -lah
(не для Ubuntu)источник