GNU/Linux >> Belajar Linux >  >> Linux

Di Linux, apa cara yang lebih cepat daripada `find` atau `diff -r` untuk melihat apakah sesuatu di dalam direktori telah berubah?

Solusi 1:

Tar GNU memiliki opsi --newer-mtime , yang memerlukan argumen tanggal, yang mungkin akan menjadi terakhir kali Anda melakukan pencadangan. Bergantung pada seberapa banyak pekerjaan yang Anda inginkan untuk memulihkan sistem file, ini bisa menjadi cadangan lengkap terakhir, dalam hal ini Anda perlu memulihkan dump penuh dan harian terakhir, atau Anda dapat melakukannya sejak penambahan terakhir, di mana kasus, Anda harus memulihkan dump penuh dan setiap dump setelah itu.

Opsi ini bergantung pada stempel waktu modifikasi pada file, jadi jika itu telah diubah secara eksplisit, ada kemungkinan cadangan Anda akan melewatkannya.

Solusi 2:

Utilitas incron menggunakan inotify untuk menjalankan perintah ketika peristiwa sistem file terjadi. File konfigurasi seperti crontab, tetapi bukan waktu yang Anda tentukan jalur dan acara.

Perintah tersebut dapat berupa skrip cadangan Anda (dalam hal ini pencadangan akan segera dimulai setelah file dimodifikasi), atau Anda dapat membuatnya membuat beberapa file, dan meminta skrip cadangan memeriksa keberadaan file tersebut dan kemudian menghapusnya. Jika file tersebut ada, salah satu peristiwa terjadi sejak terakhir dijalankan.

Solusi 3:

Anda selalu dapat mem-pipe menemukan output ke wc dan dapatkan jumlah bilangan bulat dari file yang diubah:

find . -ctime 1 | wc -l

Meskipun jawaban David membutuhkan lebih sedikit perubahan kode :)

Solusi 4:

Ini sedikit ide liar, tetapi Anda bisa bermain sedikit dengan md5sum dan ls.

Ide ini adalah untuk hanya melihat md5sum dari satu file, dan file itu adalah daftar file dari direktori yang Anda tonton. Dan selama tidak ada perubahan, md5sum adalah sama. Namun jika stempel waktu diperbarui, md5sum akan berubah, dan Anda tahu bahwa Anda perlu melakukan tar baru dan mengirimkannya ke server ftp Anda.

Kita bisa mulai dengan sesuatu seperti ini

ls -lR /path/to/dir/ | md5sum > file_list.txt.md5

Maka Anda perlu menambahkan perbandingan antara md5 lama dan yang sekarang... dll dll

/Johan

Solusi 5:

Versi terbaru GNU find memiliki aksi "-quit", yang menyebabkan find segera menghentikan pencarian:

— Tindakan:-berhenti

Keluar segera (dengan mengembalikan nilai nol jika tidak ada kesalahan yang terjadi). Ini berbeda dengan '-prune' karena '-prune' hanya berlaku untuk konten direktori yang dipangkas, sedangkan '-quit' hanya membuat find berhenti dengan segera. Tidak ada proses anak yang akan dibiarkan berjalan, tetapi tidak ada lagi file yang ditentukan pada baris perintah yang akan diproses. Misalnya, find /tmp/foo /tmp/bar -print -quit hanya akan mencetak '/tmp/foo'. Setiap baris perintah yang telah dibuat dengan '-exec ... +' atau '-execdir ... +' dipanggil sebelum program ditutup.

Anda dapat menggunakan ekspresi temukan untuk menemukan file yang telah berubah, dan gunakan -quit untuk berhenti segera setelah Anda menemukannya. Itu seharusnya lebih cepat daripada menemukan melanjutkan pemindaiannya.

-quit telah ditambahkan di fileutils V4.2.3


Linux
  1. Bagaimana cara mengetahui proses apa yang mengunci file di Linux?

  2. Periksa apakah direktori kosong menggunakan C di Linux

  3. Cara yang lebih cepat untuk memindahkan halaman memori daripada mremap()?

  1. Temukan file lalu cd ke direktori itu di Linux

  2. Menemukan direktori di Terminal Linux

  3. Di Linux, metrik apa yang memiliki rute tanpa metrik?

  1. Apa itu double dot(..) dan single dot(.) di Linux?

  2. Bagaimana saya bisa menemukan file/direktori yang bisa berada di mana saja di baris perintah linux?

  3. Apa cara tercepat untuk memindahkan sejuta gambar dari satu direktori ke direktori lain di Linux?