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?
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?
Jawaban:
Seperti @ Jo menunjukkan Anda melewatkan ruang antara name
dan '*.gz'
; juga untuk mempercepat perintah penggunaan -type f
pilihan untuk menjalankan perintah pada f iles saja.
Jadi perintah tetapnya adalah:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' \;
find
: perintah unix untuk mencari f iles / d irectories / l tinta dan lain-lain/path/to/
: direktori untuk memulai pencarian Anda.-type f
: hanya menemukan file.-name '*.gz'
: daftar file yang diakhiri dengan .gz
.-mtime +7
: hanya mempertimbangkan yang dengan waktu modifikasi lebih dari 7 hari.-execdir ... \;
: untuk setiap hasil yang ditemukan, lakukan perintah berikut di ...
.rm -- '{}'
: hapus file; yang {}
bagian mana hasil find akan diganti menjadi dari bagian sebelumnya. --
berarti parameter perintah akhir menghindari kesalahan prompt untuk file-file yang dimulai dengan tanda hubung .find /path/to/ -type f -mtime +7 -name '*.gz' -print0 | xargs -r0 rm --
Dari manusia menemukan :
-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 berjumlah:
rm file1 file2 file3 ...
sebagai lawan:
rm file1; rm file2; rm file3; ...
seperti pada -exec
metode.
Sebuah alternatif dan juga lebih cepat perintah menggunakan exec ini +
terminator bukan\;
:
find /path/to/ -type f -mtime +7 -name '*.gz' -execdir rm -- '{}' +
Perintah ini akan berjalan rm
hanya sekali di akhir daripada setiap kali file ditemukan dan perintah ini hampir secepat menggunakan -delete
opsi seperti berikut di modern find
:
find /path/to/ -type f -mtime +7 -name '*.gz' -delete
-delete
pada akhirnya? Mengapa mengacaukan dengan +
atau \;
?
Hati-hati menghapus file dengan find. Jalankan perintah dengan -l untuk memeriksa apa yang Anda hapus
find /media/bkfolder/ -mtime +7 -name '*.gz' -ls
. Kemudian tarik perintah dari histori dan tambahkan-exec rm {} \;
Batasi kerusakan yang ditemukan oleh perintah find. Jika Anda ingin menghapus file hanya dari satu direktori, -maxdepth 1
cegah cari dari menelusuri subdirektori atau dari mencari sistem lengkap jika Anda salah ketik /media/bkfolder /
.
Batas lain yang saya tambahkan adalah argumen nama yang lebih spesifik seperti -name 'wncw*.gz'
, menambahkan waktu yang lebih baru -mtime -31
, dan mengutip direktori yang dicari. Ini sangat penting jika Anda mengotomatiskan pembersihan.
find "/media/bkfolder/" -maxdepth 1 -type f -mtime +7 -mtime -31 -name 'wncw*.gz' -ls -exec rm {} \;
name
dan'*.gz'
.