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

5
Mengapa tidak menghapus folder dan membuatnya kembali setelah dihapus?
garconcn

Jawaban:


35
$ find /path/to/folder -type f -delete

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

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 {} \;

2
-name '*'tidak berarti "semua file". File dikatakan dengan:-type f
poige


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.