Bagaimana cara menghapus banyak (200 000) file?

17

Saya harus menghapus 200 000 file (semuanya) dari folder, dan saya tidak ingin menghapus folder itu sendiri.

menggunakan rm, saya mendapatkan kesalahan "Daftar argumen terlalu panjang". Saya sudah mencoba melakukan sesuatu dengan xargs, tapi saya bukan Shell Guy, jadi tidak berhasil:

find -name * | xargs rm -f
FMaz008
sumber
5
Mengapa tidak menghapus folder dan membuatnya kembali setelah dihapus?
garconcn

Jawaban:

35
$ find /path/to/folder -type f -delete
kuanta
sumber
15
Mungkin perlu disebutkan bahwa GNU find (seperti yang digunakan oleh sebagian besar distribusi Linux) dapat menghapus file sendiri -delete. Ini juga menghindari masalah dengan file yang mengandung tanda kutip atau karakter baris baru (meskipun Anda bisa menggunakan opsi GNU find -print0dan GNU xarg -0untuk memperbaikinya).
DerfK
3
@ DerfK, komentar yang bagus! Juga, banyak ppl cenderung untuk bermain xargssementara itu findmemiliki -exec command {} +sintaks.
poige
5

Anda melakukan segalanya dengan benar. Ini adalah '*' yang memberi Anda masalah (shell memperluasnya ke daftar file, bukan find). Sintaks yang tepat bisa:

cd <your_directory>; find . -type f | xargs rm -f
find <your_directory> -type f | xargs rm -f

(Yang terakhir ini sedikit kurang efisien karena akan memberikan nama yang lebih panjang xargs, tetapi Anda tidak akan memperhatikan :-))

Atau, Anda dapat melarikan diri dari '*' Anda seperti ini (namun dalam hal itu juga akan mencoba juga menghapus "." Dan ".."; itu bukan masalah besar - Anda hanya akan mendapatkan sedikit peringatan :-)):

find . -name '*' | xargs rm -f
find . -name "*" | xargs rm -f
find . -name \* | xargs rm -f

Jika nama file Anda mengandung spasi maka gunakan ini:

find . -type f -print0 | xargs -0 rm -f
dtoubelis
sumber
1
Ini tidak berfungsi jika Anda memiliki nama file yang mengandung spasi.
user9517 didukung GoFundMonica
@lain: Ya, saya baru saja dalam proses mengedit jawaban saya untuk memasukkan trik spasi putih :-)
dtoubelis
3

Perintah berikut akan menghapus semua file dari direktori saat ini :

find . -type f -exec rm {} \;
George Tasioulis
sumber
2
-name '*'tidak berarti "semua file". File dikatakan dengan:-type f
poige
2

Anda dapat mencoba

find /path/to/folder -type f -print0  | xargs -0 rm -f

atau

find /path/to/folder -type f -exec rm -f "{}" +
user9517 didukung GoFundMonica
sumber
1

Kudos to quantas answer, berikut adalah beberapa tambahan.

Jika Anda ingin menghapus file dengan pola nama tertentu, Anda dapat menulisnya seperti ini. Juga ditambahkan -cetak sehingga Anda dapat melihat apa yang terjadi ketika file sedang dihapus.

sudo find /home/mydirectory -name "*.jpg" -type f -print -delete

Ini misalnya menghapus semua jpeg di direktori saya.

Waltur Buerk
sumber