Jawaban:
Jika nama file diberi nomor secara berurutan, jalankan saja perintah berikut:
rm fileName_{100..100000}
execpanggilan ke jumlah argumen yang dapat dimiliki suatu proses. Anda dapat mengambilnya dengan getconf ARG_MAX. Sebagai contoh pada sistem saya itu 2097152(~ 2,1 juta). Ini berarti bahwa rm(yang bukan built-in) akan gagal dengan lebih dari banyak file. Perintah bawaan tidak memiliki masalah ini, dan solusi yang diajukan juga tidak.
Anda dapat mencoba perintah ini juga,
for i in $(seq 100 100000); do rm fileName_$i; done
Ini akan menghapus semua file (berkisar 100 hingga 100000) jika nama file berisi angka dalam urutan berurutan.
Secara umum Anda memiliki beberapa cara untuk mencapai ini:
rm fileName_{100..100000}
akan diperluas oleh shell menjadi sekitar 100.000 nama file. Jika nama dasar adalah jalur panjang dan jumlahnya cukup tinggi, Anda mungkin benar-benar melebihi panjang maksimum baris perintah dengan pendekatan ini.
The forloop
for i in $(seq 100 100000); do rm fileName_$i; done
tidak menderita masalah ini, tetapi merupakan cara yang relatif lambat menghapus file, karena shell harus melakukan substitusi variabel dan meluncurkan rm sekitar 100.000 kali.
Kedua metode di atas dapat menyebabkan peringatan jika beberapa file, misalnya filename_101hilang.
Biasanya, solusi berdasarkan findlebih baik, karena mereka hanya bekerja pada file yang sebenarnya ada (selama penemuan). Namun, ada beberapa perbedaan halus:
find . -name 'fileName_[100-100000]' -exec rm {} \;
masih akan meluncurkan rmprogram sekitar 100.000 kali, sementara mengganti final \;dengan +akan mencoba untuk meminimalkan jumlah subproses. Kedua metode mungkin akan (lebih atau sedikit) lebih lambat daripada menggunakan -deleteyang tidak menggunakan perintah eksternal sama sekali tetapi memanggil sistem panggilan saja.
Namun, selalu periksa dulu apakah polanya benar-benar cocok dengan file yang ingin Anda targetkan:
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
Jadi dalam hal ini Anda akan menghapus file yang ingin Anda simpan dan meninggalkan file yang seharusnya dihapus.
Gunakan perintah berikut:
find . -name 'fileName_[100-100000]' -exec rm {} \;
Itu akan menghapus file dari 100 hingga 100000.
Informasi lebih lanjut: Situs
{x..y}ke seluruh daftar. Misalnya jika Anda menggunakannyaecho test{1..3}akan diperluas keecho test1 test2 test3dan kemudian dieksekusi. Seperti yang Anda lihat, itu dicetaktest1 test2 test3. Demikian pula, jika{x..y}tidak terhubung ke argumen apa pun, itu hanya akan menempatkan angka di sana. Misalnyaecho test {1..3}hanya akan mencetaktest 1 2 3.