Pertanyaan Menghapus file yang lebih lama dari 7 hari


Saya menulis perintah di bawah ini untuk menghapus semua file yang lebih lama dari 7 hari, tetapi tidak berfungsi:

find /media/bkfolder/ -mtime +7 -name'*.gz' -exec rm {} \;

Bagaimana saya bisa menghapus file-file ini?


47
2018-02-24 09:22


asal


Harus ada jarak antara name dan '*.gz'. - Jos


Jawaban:


Seperti @Jos menunjukkan Anda melewatkan jarak di antara keduanya name dan '*.gz'; juga untuk mempercepat penggunaan perintah -type f opsi untuk menjalankan perintah fhanya iles.

Jadi perintah tetapnya adalah:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;

Penjelasan:

  • find: perintah unix untuk mencari files /directories /ltinta dan lain-lain
  • /path/to/: direktori untuk memulai pencarian Anda.
  • -type f: hanya mencari file.
  • -name '*.gz': daftar file yang diakhiri dengan .gz.
  • -mtime +7: hanya mempertimbangkan yang dengan waktu modifikasi lebih lama dari 7 hari.
  • -execdir ... \;: untuk setiap hasil yang ditemukan, lakukan perintah berikut di ....
  • rm -- '{}': hapus file; itu {} bagian adalah tempat hasil temuan diganti dari bagian sebelumnya. -- berarti akhir dari parameter perintah menghindarkan kesalahan yang mendorong untuk file-file yang dimulai dengan tanda penghubung.

Atau, gunakan:

find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --

Dari pria temukan:

-print0 
      True; print the full file name on the standard output, followed by a null character 
  (instead of the newline character that -print uses). This allows file names that contain
  newlines or other types of white space to be correctly interpreted by programs that process
  the find output. This option corresponds to the -0 option of xargs.

Yang sedikit lebih efisien, karena jumlahnya:

rm file1 file2 file3 ...

sebagai lawan:

rm file1; rm file2; rm file3; ...

seperti dalam -exec metode.


Sebuah alternatif dan juga lebih cepat perintahnya menggunakan exec + terminator bukan \;:

find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +

Perintah ini akan berjalan rm hanya satu kali di bagian akhir daripada setiap kali file ditemukan dan perintah ini hampir sama cepatnya dengan yang digunakan -delete pilihan sebagai berikut dalam modern find:

find /path/to/ -type f -mtime +7 -name '*.gz' -delete

88
2018-02-24 10:14



Saya mengganti -name dengan -name untuk pencarian tidak sensitif terhadap kasus karena beberapa kasus saya memiliki campuran (mis. .JPG dan .jpg) - Matthew Lock