Как я могу направить вход канала к команде ls?

Когда я ввожу что-то как:

find . -name *foo* | ls -lah

это возвращает тот же результат как плоскость ls команда, как будто это не имело никакого входа.

Однако:

ls -lah $( find . -name *foo* )

работы хорошо, но только когда find команда имеет результаты.

Действительно ли возможно передать по каналу к ls ?

21
задан 31 May 2016 в 09:13

4 ответа

Можно использовать -exec с find команда.

find . -name '*foo*' -exec ls -lah {} \;
27
ответ дан 23 November 2019 в 01:38
find . -name *foo* | xargs -r ls -lah

Это должно работать.

20
ответ дан 23 November 2019 в 01:38

Попробуйте это:

find  . -name *.bak -ls
3
ответ дан 23 November 2019 в 01:38

Используйте это: (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)

3
ответ дан 23 November 2019 в 01:38

Другие вопросы по тегам:

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