Ответ 1
Попробуйте следующее:
find . -type f -printf "%[email protected] %p\n" | sort -nr | cut -d\ -f2-
Я хочу сделать что-то вроде ls -t
, но также иметь файлы в подкаталогах. Но проблема в том, что я не хочу, чтобы выход, сформированный как ls -R
, выполнялся следующим образом:
[test]$ ls -Rt
b testdir test
./testdir:
a
Я хочу, чтобы он был отформатирован, как команда find
отображает файлы в подкаталогах. То есть:
[test]$ find .
.
./b
./test
./testdir
./testdir/a
Но то, что find
, похоже, не делает, - это упорядочить результат хронологически по времени последнего обновления.
Итак, как я могу перечислить все файлы в каталоге и подкаталогах в формате find
, но в обратном хронологическом порядке?
Попробуйте следующее:
find . -type f -printf "%[email protected] %p\n" | sort -nr | cut -d\ -f2-
ls -lR
- отображать все файлы, каталоги и подкаталоги в домашнем каталоге
ls -lR | more
используется для отображения всех файлов в потоке.
Если количество файлов, которые вы хотите просмотреть, соответствует максимальному пределу аргумента, вы можете использовать globbing для получения того, что хотите, с рекурсией, если у вас есть поддержка globstar.
Для ровного использования двух слоев: ls -d * */*
С globstar для рекурсии используйте: ls -d **/*
Аргумент -d
для ls
указывает, что он не перезаписывает каталоги, переданные как аргументы (так как вы используете переполнение оболочки для выполнения рекурсии). Это предотвращает ls
, используя его форматирование рекурсии.
find -type f -print0 | xargs -0 ls -t
Недостаток: работает только с определенным количеством файлов. Если у вас есть огромное количество файлов, вам нужно что-то более сложное
Try
find . -type d
или
find . -type d -ls
попробуйте следующее:
ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total' |sed '/^$/d'
Команда wfg5475 answer работает правильно, просто нужно добавить одну вещь, чтобы показывать только файлы в каталоге и подкаталоге:
ls -ltraR |egrep -v '\.$|\.\.|\.:|\.\/|total|^d' |sed '/^$/d'
Добавлена одна вещь: ^d
игнорировать все каталоги из выводов листинга