Список файлов на основе времени модификации

3811
portoalet

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

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

2

2 ответа на вопрос

1
user27266

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

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

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

1
mark4o

Звучит так, будто вы хотите глобальную сортировку, а не сортировку по каталогу, как вы бы сделали с этим 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будет вызываться несколько раз, и сортировка будет правильной только в каждой группе файлов.

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