Linux Utility untuk Fungsionalitas “Timestamping”

2

wget's timestamping fungsi memastikan hanya mengunduh file yang telah berubah. Saya mencari alat baris perintah linux yang secara rekursif akan membandingkan isi direktori dengan versi yang disimpan (sejak terakhir kali dijalankan), dan menjalankan perintah shell arbitary pada file baru atau yang diperbarui. Pada dasarnya:

run-on-updated --directory /path/to/my/dir --last-results ~/.lastrun --exec "echo {}"

Saya bahkan bisa membayangkan ini sebagai perpanjangan dari perintah 'temukan'. Apakah alat semacam itu ada?

Nicholas White
sumber
~ / .lastrun hanyalah sebuah file, bukan? Bukan salinan direktori lengkap? Dalam kasus terakhir Anda bisa mulai dengan rsync -v --dry-run /path/to/my/dir ~/.lastrun
mpy
Idealnya seharusnya hanya metadata file (mis. Jalur, ukuran, terakhir-dimodifikasi) daripada salinan direktori karena itu akan terlalu besar. rsync pasti memiliki fungsi timestamping ini - tetapi saya berharap menemukannya sebagai alat mandiri (filosofi unix?)
Nicholas White

Jawaban:

3

Upaya untuk menjawab pertanyaan - mungkin dengan banyak ruang untuk perbaikan:

tar -cv -f /dev/null -g ~/.lastrun /path/to/my/dir | grep -ve '/$' | xargs -I{} echo '{}'

Catatan untuk perintah tar: "Opsi '-g' memerintahkan tar untuk beroperasi pada arsip tambahan dengan metadata tambahan yang disimpan dalam file mandiri, yang disebut file snapshot. Tujuan file ini adalah untuk membantu menentukan file mana yang telah diubah, ditambahkan atau dihapus sejak cadangan terakhir, sehingga cadangan tambahan berikutnya hanya akan berisi file yang dimodifikasi. " (Kutipan dari doc)

Itu grep perintah tidak termasuk nama direktori (diakhiri dengan /) yang tar selalu menampilkan, dan akhirnya xargs akan menjalankan perintah yang diinginkan pada file.

mpy
sumber
1
Ini bekerja! Ini memperbarui file ~ / .lastrun di tempat yang berguna juga.
Nicholas White
Senang itu berhasil untuk Anda. Harap berhati-hati jika ada beberapa nama file dengan spasi putih (saya terlalu lelah kemarin untuk memikirkan itu;) Anda akan lebih menghemat saat menggunakan xargs -I{} echo '{}' - Saya mengedit jawaban saya sesuai.
mpy
1

Saya tidak yakin apa yang Anda maksud dengan kalimat "membandingkan isi direktori dengan versi yang disimpan", tetapi untuk melakukan apa yang dilakukan jawaban mpy, saya lebih suka find:

Sebelum menjalankan find perintah pertama kali, Anda harus menjalankan touch perintah jangan membuat file timestamp:

touch .lastrun

Kemudian, jalankan perintah sentuh setelah find run:

find my/dir -type f -newer .lastrun -exec echo '{}' \;
touch .lastrun

Berkas .lastrun tidak akan pernah terdaftar sendiri, karena tidak pernah lebih baru dari dirinya sendiri.

Volker Siegel
sumber