Unix: перелік каталогів, включаючи останній змінений час


3

У мене є каталог каталогів з великою кількістю гілок і дерев. Однак у верхньому вузлі є лише п'ять каталогів, скажімо, AE. У дереві каталогів файли оновлюються випадковим чином.

Я хотів би мати можливість отримати список каталогів (тобто, як ls ) з останнім зміненим часом файлу, який включає всі підкаталоги та файли в цьому каталозі. Тож я закінчу щось подібне:

A 12 червня 08:00 B 13 червня 08:00 C 14 червня 08:00 D 15 червня 08:00 E 16 червня 08:00

Я спробував варіанти ls -t, але це, схоже, не враховує підкаталоги.

Існує також щось подібне find . -type f | xargs ls -tr, але я не бачу способу отримати вихідний результат, який я хочу використовувати (зверніть увагу: я дуже обмежений у своїх знаннях Unix, як ви, напевно, можете сказати).

Відповіді:


1

Це може бути те, що ви шукаєте:

#!/bin/bash
for dir in A B C D E
do
    file=$dir
    while [[ -n $file ]]
    do
        prev=$file
        file=$(find $dir -newer $file -type f -print -quit)
    done
    mod=$(stat --format=%Y "$prev")
    echo "$dir $(date --date=@$mod '+%d %b %T')"
done

Якщо ви будете приймати статистику (цілком розумно), ви можете уникнути хіба (потенційного) результату O (n ^ 2):mod="$(find "$dir" -print0 | xargs -0 stat --format=%Y | sort -rn | head -1)"
Кріс Джонсен

Або суцільний O (n):mod=$(max=0; find "$1" -print0 | xargs -0 stat --format=%Y | while read -r dt; do test $dt -gt $max && max=$dt && echo $max; done | tail -1)
Кріс Джонсен

@Chris: Так, твій набагато швидше. Ви повинні опублікувати це як відповідь. Однак, ви повинні знати, що head -1стиль застарілий (а в моїй системі tail -1відмовляється). Це повинно бути head -n 1.
Денніс Вільямсон

2

Використовуйте ls -clRt. Він є рекурсивним і сортує за останнім зміненим часом.


Не відповідає на питання - плакат не запитував рекурсивний список каталогів та їх вмісту, а скоріше рівний список конкретних елементів, кожен поряд із статистикою (час останнього зміненого файлу), отриманим рекурсивним обходом.
AndrewF
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.