Когда я ввожу что-то как:
find . -name *foo* | ls -lah
это возвращает тот же результат как плоскость ls
команда, как будто это не имело никакого входа.
Однако:
ls -lah $( find . -name *foo* )
работы хорошо, но только когда find
команда имеет результаты.
Действительно ли возможно передать по каналу к ls
?
Можно использовать -exec
с find
команда.
find . -name '*foo*' -exec ls -lah {} \;
find . -name *foo* | xargs -r ls -lah
Это должно работать.
Используйте это: (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)