Как передать список файлов, возвращенных из find в cat, и отсортировать их - PullRequest
0 голосов
/ 20 марта 2020

Я пытаюсь найти все файлы из папки, а затем распечатать их, но отсортировал.

Пока у меня есть это

find . -type f -exec cat {} \;

, и он распечатывает все файлы, но мне тоже нужно их отсортировать, но когда я делаю

find . -type f -exec sort cat {};

, я получаю следующую ошибку

sort:cannot read:cat:No such file or directory

и если я переключаю сортировку и кошку следующим образом

find . -type f -exec cat sort {} \;

Я получаю ту же ошибку, если она печатает файл (у меня есть только один файл для печати)

Ответы [ 2 ]

1 голос
/ 20 марта 2020

Мне не ясно, хотите ли вы отображать содержимое файлов без изменений, сортируя файлы по имени, или если вы хотите отсортировать содержимое каждого файла. Если последний:

find . -type f -exec sort {} \; 

Если первый, используйте опцию bsd find -s:

find -s . -type f -exec cat {} \; 

Если у вас нет bsd find, используйте:

find . -type f -print0 | sort -z | xargs -0 cat
0 голосов
/ 20 марта 2020

Составление команд с использованием каналов часто является самым простым решением.

find . -print0 -type f | sort | xargs -0 cat

Объяснение: вы можете отсортировать имена файлов после факта, используя ... | sort, а затем передать вывод (список файлов) в cat использование xargs, то есть ... | xargs cat.

Как указывает @arkaduisz, при использовании каналов следует тщательно обрабатывать имена файлов, содержащие пробелы (таким образом, используя -print0 и -0).

...