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

Я хочу сделать что-то вроде ls -t, но также включить файлы в подкаталогах. Но проблема в том, что я не хочу, чтобы вывод форматировался как ls -R, а именно так:

[test]$ ls -Rt
b       testdir test

./testdir:
a

Я хочу, чтобы он был отформатирован так, как команда find отображает файлы в подкаталогах. То есть:

[test]$ find .
.
./b
./test
./testdir
./testdir/a

Но что find, похоже, не упорядочивает результат в хронологическом порядке по времени последнего обновления.

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


person dan    schedule 05.02.2011    source источник
comment
Это не вопрос программирования, используйте superuser.com и unix.stackexchange.com   -  person Dan Grossman    schedule 06.02.2011
comment
Я использую вывод этой команды в программе. Разве это не программирование?   -  person dan    schedule 06.02.2011


Ответы (7)


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

find . -type f -printf "%T@ %p\n" | sort -nr | cut -d\  -f2-
person marco    schedule 05.02.2011
comment
Просто к вашему сведению, это работает только с поиском GNU. Ну, по крайней мере, find на FreeBSD не поддерживает команду printf. - person Ricky Morse; 04.11.2014
comment
Разве find . -type f -printf "%p\n" недостаточно? - person Telmo Trooper; 26.02.2020

ls -lR для отображения всех файлов, каталогов и подкаталогов текущего каталога ls -lR | more используется для отображения всех файлов в потоке.

person rashmi    schedule 26.11.2012
comment
Извините, но я не понимаю, почему это перечисляет вещи в домашнем каталоге? Флаг R предназначен для рекурсивного перечисления подкаталогов, я не вижу ссылки на домашний каталог на справочной странице ls. Как я понял, он перечисляет подкаталоги, где бы вы ни находились. - person Muhamed Huseinbašić; 18.04.2018
comment
Хороший и прямой ответ :) - person RPichioli; 27.05.2020

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

Для ровно 2 слоев глубокого использования: ls -d * */*

С globstar для рекурсивного использования: ls -d **/*

Аргумент -d для ls говорит ему не рекурсивно использовать каталоги, переданные в качестве аргументов (поскольку вы используете подстановку оболочки для выполнения рекурсии). Это предотвращает использование рекурсивного форматирования ls.

person Parakleta    schedule 06.05.2015
comment
@YoYo Спасибо, что удалили мою лишнюю строку объяснения внизу. Я попытался отправить редактирование с односимвольным изменением, но оно было отклонено SO за слишком маленькое изменение. Знаете ли вы, есть ли способ обойти это? - person Taylor Edmiston; 08.09.2016

Попробуйте find . -type d или find . -type d -ls

person Bobby    schedule 01.02.2013
comment
Можете ли вы добавить больше объяснений, почему это отвечает на вопрос. - person ChrisF; 02.02.2013

find -type f -print0 | xargs -0 ls -t

Недостаток: Работает только с определенным количеством файлов. Если у вас чрезвычайно большое количество файлов, вам нужно что-то более сложное.

person yankee    schedule 05.02.2011
comment
вы пропустили добавление домена поиска: find . -type f -print0 | xargs -0 ls -t, но тогда ваше решение работает на mac os, в отличие от других, перечисленных здесь - person d00d; 08.11.2016

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

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'
person wfg5475    schedule 03.05.2013

Команда в ответе wfg5475 работает правильно, просто нужно добавить одну вещь, чтобы отображались только файлы в каталоге и подкаталоге:

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' |sed '/^$/d'

Добавлено одно: ^d для игнорирования всех каталогов из выходных данных листинга

person Pankaj Tiwari    schedule 24.07.2015