GNU/Linux >> Belajar Linux >  >> Linux

Skrip Bash untuk menghapus file yang lebih lama dari x hari dengan subdirektori

type opsi untuk memfilter hasil

find menerima type opsi untuk memilih, misalnya, hanya file.

find /path/to/files -type f -mtime +10 -delete

Abaikan -delete untuk menunjukkan apa yang akan dihapus, dan setelah Anda memverifikasinya, lanjutkan dan jalankan perintah lengkap.

Itu hanya akan berjalan di file, bukan direktori. Gunakan -type d sebaliknya, hanya cantumkan direktori yang cocok dengan argumen Anda.

Opsi tambahan

Anda mungkin ingin membaca man find , karena ada beberapa opsi lagi yang mungkin Anda perlukan di masa mendatang. Misalnya, -maxdepth akan memungkinkan Anda untuk hanya membatasi item yang ditemukan ke kedalaman tertentu, mis. -maxdepth 0 tidak akan berulang ke subdirektori.

Beberapa komentar

  • Saya bertanya-tanya bagaimana perintah itu akan menghapus folder, karena Anda tidak dapat menghapus folder dengan rm hanya. Anda membutuhkan rm -r untuk itu.

  • Juga, /path/to/files* membingungkan. Apakah maksud Anda /path/to/files/ atau apakah Anda mengharapkan karakter pengganti diperluas ke beberapa nama file dan folder?

  • Masukkan {} dalam tanda kutip tunggal, yaitu '{}' untuk menghindari nama file/direktori yang diganti ditafsirkan oleh shell, sama seperti kita melindungi titik koma dengan garis miring terbalik.


Seperti pada jawaban sebelumnya (+1 untuk keduanya) triknya adalah menggunakan -type f predikat.

Perhatikan, bahwa alih-alih -exec rm '{}' Anda juga dapat menggunakan -delete predikat. Tapi jangan lakukan itu. Dengan -exec rm '{}' Anda dapat (dan harus) terlebih dahulu melakukan -exec echo rm '{}' untuk memverifikasi bahwa ini benar-benar yang Anda inginkan. Setelah itu jalankan kembali perintah tanpa echo .

Menggunakan -delete lebih cepat (tanpa tambahan fork() dan execve() untuk setiap file), tetapi ini berisiko karena -delete berfungsi juga sebagai syarat, jadi:

# delete *.tmp files
find . -type f -name '*.tmp' -delete

tetapi jika Anda HANYA menukar argumen:

# delete ALL files
find . -type f -name '*.tmp' -delete

Jika Anda membutuhkan find dan rm untuk bekerja lebih cepat untuk banyak file, lihat find ... | xargs ... rm Idiom UNIX.


Linux
  1. Bagaimana cara Menghapus semua file yang lebih lama dari X jumlah Hari di Linux?

  2. Bagaimana Cara Membuat Cron Job Yang Secara Otomatis Menghapus File Yang Lebih Lama Dari 30 Hari?

  3. Cara Menghapus File Lebih Lama dari N hari menggunakan tmreaper di Linux

  1. Cara Menghapus File Yang Lebih Lama Dari n Hari TANPA Menggunakan Perintah find

  2. Cara menemukan dan menghapus file yang lebih lama dari periode waktu tertentu di Linux

  3. Hapus semua file kecuali 3 terbaru dalam skrip bash

  1. temukan dan hapus file atau folder yang lebih lama dari x hari

  2. Bagaimana Anda menghapus file yang lebih lama dari tanggal tertentu di Linux?

  3. Hapus file yang cocok di semua subdirektori