Ini mungkin dilakukan tanpa membuat file menggunakan substitusi proses atau semacamnya, tetapi inilah solusi cepat dan kotornya:
find . -type f -mtime +30 -printf '%h\n' | sort | uniq > old.txt
find . -type f -mtime -30 -printf '%h\n' | sort | uniq > new.txt
grep -vf new.txt old.txt
Perintah pertama menampilkan jalur setiap file yang dimodifikasi lebih dari 30 hari yang lalu (dalam -printf
find -- setidaknya dengan temuan GNU di sistem saya -- %h
mencetak seluruh jalur kecuali untuk nama file yang sebenarnya), lalu mengurutkannya dan menghilangkan duplikat apa pun, dan memasukkan semuanya ke dalam file bernama old.txt
.
Perintah kedua melakukan hal yang sama tetapi dengan setiap file dimodifikasi kurang dari 30 hari yang lalu, dan memasukkannya ke dalam file lain, new.txt
.
Baris grep mencetak setiap baris dari old.txt yang tidak muncul di new.txt -- jadi ini akan memberi Anda daftar direktori yang hanya file yang terakhir diubah lebih dari 30 hari yang lalu.
Ini semua menggunakan utilitas versi GNU. Saya tidak tahu apakah sintaks cocok dengan versi BSD, dll.
Akhirnya menemukan satu kalimat ajaib:
for dir in `find . -type d -mtime +30`; do test `find $dir -type f -mtime -30 -print -quit` || echo $dir; done
Ini mencetak direktori apa pun yang memiliki waktu modifikasi lebih dari 30 hari dan tidak ada file yang diubah dalam 30 hari terakhir.