2

Как я могу выполнить команду ls со всеми ее параметрами и рекурсивно перечислить все файлы в каталогах и отсортировать их по времени последнего изменения?

т.е. ls -lth для всех файлов в каталогах рекурсивно

2 ответа2

1

Во-первых, какой вариант Unix вы используете? Системы, основанные на BSD, будут иметь разные опции для ls Система V.

Во-вторых, http://unixhelp.ed.ac.uk/CGI/man-cgi?ls перечисляет ключ -R чтобы вызвать рекурсивный листинг, и -c чтобы основывать его сортировку на ctime или времени модификации.

Хитрость заключается в том, чтобы убедиться, что ваш вариант * nix использует версию ls которая включает эти ключи.

1

Похоже, вам нужна глобальная сортировка, а не сортировка по каталогам, как вы получите с помощью ls -Rlth .

Если общее количество файлов не слишком велико, это можно сделать с помощью команды find чтобы собрать имена и передать их в ls для сортировки:

find . -type f -exec ls -lth {} +

или в качестве альтернативы

find . -type f -print0 | xargs -0 ls -lth

(В некоторых старых системах команда find не поддерживает ни -exec ... + ни -print0 . В этом случае вы можете использовать -print вместо -print0 и опустить -0 , но тогда он не будет работать с именами файлов, содержащими пробелы или другие специальные символы.)

Предостережение: если количество сортируемых файлов велико, их может быть слишком много, чтобы перечислить их в качестве аргументов для одной команды ls . В этом случае ls будет вызываться несколько раз, и сортировка будет правильной только в каждой группе файлов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .