Как мне перечислить все файлы в каталоге и подкаталогах в обратном хронологическом порядке? - PullRequest
53 голосов
/ 06 февраля 2011

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

[test]$ ls -Rt
b       testdir test

./testdir:
a

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

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

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

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

Ответы [ 7 ]

77 голосов
/ 26 ноября 2012

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

37 голосов
/ 06 февраля 2011

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

find . -type f -printf "%T@ %p\n" | sort -nr | cut -d\  -f2-
11 голосов
/ 06 мая 2015

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

Для использования ровно в 2 слоях: ls -d * */*

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

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

3 голосов
/ 02 февраля 2013

Try find . -type d или же find . -type d -ls

3 голосов
/ 06 февраля 2011
find -type f -print0 | xargs -0 ls -t

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

2 голосов
/ 03 мая 2013

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

ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'
1 голос
/ 24 июля 2015

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

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

Добавлено одно: ^d, чтобы игнорировать все каталоги из списка вывода

...