Solusi 1:
find . -maxdepth 1 -type f -exec rm -f {} \;
itu hanya membutuhkan waktu terlalu lama (satu exec dari rm per file).
yang ini jauh lebih efisien:
find . -maxdepth 1 -type f -print0 | xargs -r0 rm -f
karena dibutuhkan sebanyak mungkin nama file sebagai argumen untuk rm, lalu jalankan rm dengan beban nama file berikutnya... mungkin saja rm hanya dipanggil 2 atau 3 kali.
Solusi 2:
Jika Anda tidak dapat menghapus direktori, Anda selalu dapat menggunakan find.
find . -maxdepth 1 -type f -exec rm -f {} \;
Itu akan menghapus semua file di direktori saat ini, dan hanya direktori saat ini (bukan subdirektori).
Solusi 3:
Kedua hal ini akan menyelesaikan masalah. Ada analisis kinerja masing-masing teknik di sini.
find . -name WHATEVER -exec rm -rf {} \;
atau
ls WHATEVER | xargs rm -rf
Masalahnya berasal dari bash memperluas "*" dengan setiap item dalam direktori. Kedua solusi ini bekerja melalui setiap file secara bergantian.
Solusi 4:
Saya dapat melakukan ini dengan mencadangkan satu level:
cd ..
Dan berjalan:
rm directory name -rf
Dan kemudian membuat ulang direktori.
Solusi 5:
Semua doa find ini sangat bagus tapi saya jarang ingat persis nomenklatur yang dibutuhkan saat saya sedang terburu-buru:sebagai gantinya saya menggunakan ls. Seperti yang disebutkan seseorang, ls . akan berhasil tetapi saya lebih suka ls -1 seperti pada:
ls -1 | xargs -n 100 rm -rf
Angka -n xxx cukup aman untuk dimainkan karena melebihi maksimum akan dikoreksi secara otomatis (jika size-max terlampaui; lihat -s ) atau jika args-max untuk suatu aplikasi terlampaui biasanya akan lebih baik jelas.
Perlu dicatat grep berguna untuk menyisipkan di tengah rantai ini ketika Anda hanya ingin menghapus subset file dalam direktori besar, dan karena alasan apa pun tidak ingin menggunakan find.
Jawaban ini menganggap Anda menggunakan utilitas inti Gnu untuk ls, xargs &dll.