ls -ltr --directory $(find . -regex "./.*[^/]*\'" -type f | xargs -n 1 dirname | sort | uniq)
Команда «ls -ltr —directory $(find . -regex «./.*[^/]*\'» -type f | xargs -n 1 dirname | sort | uniq)» выводит список непустых каталогов без дочерних каталогов в поддереве текущего каталога, отсортированных по времени последнего изменения (mtime).
Пояснение к каждой части команды:
— «find . -regex «./.*[^/]*\'» -type f» ищет все файлы в текущем каталоге и его подкаталогах, используя регулярное выражение «./.*[^/]*», которое означает любой файл без слэшей в конце.
— «xargs -n 1 dirname» передает каждый найденный файл в команду «dirname», чтобы получить только каталог, в котором находится каждый файл.
— «sort» сортирует полученные каталоги в лексикографическом порядке.
— «uniq» удаляет дубликаты каталогов, чтобы получить только уникальные.
Альтернативы:
— Можно использовать команду «find» с флагом «-type d» для поиска только каталогов, но эта команда также вернет дочерние каталоги.
— Другая альтернатива — использовать команду «du» с флагом «—max-depth=1», которая позволяет получить размер каждого каталога в текущем каталоге и его подкаталогах. Тем не менее, эта команда не сортирует результаты по времени последнего изменения (mtime).
Аргументы, передаваемые команде:
— «-ltr» указывает команде «ls» отобразить результаты в формате long listing, отсортированные по времени последнего изменения в обратном порядке.
— «—directory» заставляет команду «ls» отображать только имена каталогов, а не их содержимое.