Unix: Daftar direktori termasuk waktu modifikasi terakhir

3

Saya memiliki pohon direktori dengan banyak cabang dan pohon. Namun, pada simpul teratas, hanya ada lima direktori, katakanlah AE. Di dalam pohon direktori, file diperbarui secara acak.

Saya ingin bisa mendapatkan daftar direktori (yaitu, seperti ls ) dengan waktu file yang dimodifikasi terakhir yang mencakup semua sub direktori dan file dalam direktori itu. Jadi saya akan berakhir dengan sesuatu seperti ini:

A 12 Juni 08:00 B 13 Juni 08:00 C 14 Juni 08:00 D 15 Juni 08:00 E 16 Juni 08:00

Saya sudah mencoba varian ls -t, tetapi sepertinya tidak mempertimbangkan sub-direktori.

Ada juga sesuatu seperti ini find . -type f | xargs ls -tr, tapi saya tidak bisa melihat cara untuk mendapatkan output yang saya ingin menggunakan ini (catatan: Saya sangat terbatas dalam pengetahuan Unix saya, karena Anda mungkin bisa tahu).

MSH
sumber

Jawaban:

1

Ini mungkin yang Anda cari:

#!/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
Dennis Williamson
sumber
Jika Anda akan menganggap stat (benar-benar masuk akal), Anda dapat menghindari (potensi) O (n ^ 2) hit kinerja:mod="$(find "$dir" -print0 | xargs -0 stat --format=%Y | sort -rn | head -1)"
Chris Johnsen
Atau O padat (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 Johnsen
@ Chris: Ya, milikmu jauh lebih cepat. Anda harus mempostingnya sebagai jawaban. Namun, Anda harus tahu bahwa head -1gaya tersebut sudah usang (dan pada sistem saya tail -1penolakan sama sekali). Seharusnya begitu head -n 1.
Dennis Williamson
2

Gunakan ls -clRt. Itu rekursif, dan urutkan berdasarkan waktu modifikasi terakhir.

Joakim Johansson
sumber
Tidak menjawab pertanyaan - poster itu tidak meminta daftar direktori rekursif dan isinya melainkan daftar datar item tertentu, masing-masing di samping stat (waktu file terakhir yang dimodifikasi) yang telah diperoleh dengan traversal rekursif.
AndrewF