Saya bertanya-tanya apakah ada yang tahu cara mengubah cap waktu folder secara rekursif berdasarkan cap waktu terbaru yang ditemukan dari file dalam folder itu.
Jadi misalnya:
jon @ UbuntuPanther: / media / media / MP3s / Foo Fighters / (1997-05-20) Warna dan Bentuk $ ls -alF total 55220 drwxr-xr-x 2 jon jon 4096 2010-08-30 12:34 ./ drwxr-xr-x 11 jon jon 4096 2010-08-30 12:34 ../ -rw-r - r-- 1 jon jon 1694044 2010-04-18 00:51 Foo Fighters - Doll.mp3 -rw-r - r-- 1 jon jon 3151170 2010-04-18 00:51 Foo Fighters - Enough Space.mp3 -rw-r - r-- 1 jon jon 5004289 2010-04-18 00:52 Foo Fighters - Everlong.mp3 -rw-r - r-- 1 jon jon 5803125 2010-04-18 00:51 Foo Fighters - February Stars.mp3 -rw-r - r-- 1 jon jon 4994903 2010-04-18 00:51 Foo Fighters - Hei, Johnny Park! .mp3 -rw-r - r-- 1 jon jon 4649556 2010-04-18 00:52 Foo Fighters - Monkey Wrench.mp3 -rw-r - r-- 1 jon jon 5216923 2010-04-18 00:51 Foo Fighters - My Hero.mp3 -rw-r - r-- 1 jon jon 4294291 2010-04-18 00:52 Foo Fighters - My Poor Brain.mp3 -rw-r - r-- 1 jon jon 6778011 2010-04-18 00:52 Foo Fighters - New Way Home.mp3 -rw-r - r-- 1 jon jon 2956287 2010-04-18 00:51 Foo Fighters - See You.mp3 -rw-r - r-- 1 jon jon 2730072 2010-04-18 00:51 Foo Fighters - Up in Arms.mp3 -rw-r - r-- 1 jon jon 6086821 2010-04-18 00:51 Foo Fighters - Walking After You.mp3 -rw-r - r-- 1 jon jon 3033660 2010-04-18 00:52 Foo Fighters - Wind Up.mp3
Folder "(1997-05-20) The Color and The Shape" akan memiliki stempel waktu ditetapkan ke 2010-04-18 00:52.
sumber
/media/media/MP3s
? Kemudian pada zsh:for d in /media/media/MP3s/**/*(/); do touch -r $d/*(Dom[1]) $d; done
. Tanpa zsh (tapi sungguh, gunakan zsh, itu hanya lebih sederhana): letakkan perintah dalam skrip dan jalankanfind /media/media/MP3s -type d -execdir /path/to/the/script \;
.for d in ...
bagaimana Anda bisa menyesuaikan yang berikut, jadi itu juga akan berfungsi dengan folder, yang berisi spasi? (itu masih hilang dalam solusi saya)Itu bukan "rekursif", itu hanya mengubah semua stempel waktu di folder. Jika itu yang Anda maksud, ada dua langkah.
stat -c '%Y' filename
akan menampilkan stempel waktu darifilename
, danstat -c '%Y %n' *
akan menampilkan stempel waktu dan nama file dari setiap file dalam folder, jadi ini akan menemukan nama file dari file yang paling baru dimodifikasi dalam folder saat ini:Setelah dipikir-pikir, ada cara yang lebih mudah untuk mendapatkan stempel waktu tertinggi di folder:
Maka Anda ingin mengubah semua file dalam folder untuk memiliki cap waktu yang sama dengan file itu.
touch -r foo bar
akan berubahbar
untuk memiliki stempel waktu modifikasi yang sama denganfoo
, jadi ini akan mengubah semua file dalam folder untuk memiliki stempel waktu modifikasi yang sama dengan file modifikasi terbaru Anda:Jadi, satu-liner adalah:
sumber
ls
nama file mangles berisi karakter non-ASCII. Jika Anda menginginkan satu kalimat, gunakan zsh :-)Saya menyatukan pekerjaan dan sekarang:
Ini akan menjadi skrip yang mengubah semua direktori di dalam
/tmp/test/
ke stempel waktu dari file terbaru di dalam setiap direktori:Anda dapat menambahkan beberapa file pengujian di / tmp seperti ini:
sumber
"
lagi, pertama terlihat, seperti itu hilang, tetapi berhasil.gunakan saja
sumber
Saya menggunakan skrip ini untuk secara berkala mengatur stempel waktu folder ke konten terbaru. (Ini sangat mirip dengan jawaban Gilles):
sumber
Saya telah mengambil perintah @Gilles zsh dan meningkatkannya agar berfungsi dalam subfolder, tetapi tampaknya zsh sangat tidak efisien untuk bagian ** / * (FDod).
Kutipan memungkinkan entri direktori yang berisi spasi dan tab berfungsi dengan benar. FD membuatnya menemukan direktori non-kosong, termasuk yang dimulai dengan., Od membuatnya mencari secara mendalam-pertama , sehingga cap waktu folder induk bisa diperbarui dengan benar.
Saat pengujian, saya perhatikan bahwa kinerja dan jejak memori untuk ** / * (FDod) gila (lebih dari 1,4GB hanya untuk folder 650k), dan ia membaca semuanya sebelum mulai menyentuh folder. Setelah menggantinya dengan find / read itu menjadi lebih cepat, tidak membakar memori, dan mulai hampir langsung.
Jika Anda tidak menjalankannya dalam skrip, ganti "$ @" dengan folder tempat Anda ingin menjalankannya.
sumber
Saya tidak terlalu menyukai ketidakjelasan dari perintah shell dan dengan cepat melakukannya dengan python.
Secara rekursif mengatur semua direktori mtimes ke file / direktori mtime yang tidak dikecualikan di dalamnya.
sumber