Saya memiliki file fileName_1 , fileName_2 ... fileName_100000 di mana nama File dinomori secara berurutan. Bagaimana saya bisa menghapus file indeks lebih besar dari, katakanlah 100 ?
command-line
teaLeef
sumber
sumber
{x..y}
ke seluruh daftar. Misalnya jika Anda menggunakannyaecho test{1..3}
akan diperluas keecho test1 test2 test3
dan 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
.exec
panggilan ke jumlah argumen yang dapat dimiliki suatu proses. Anda dapat mengambilnya dengangetconf ARG_MAX
. Sebagai contoh pada sistem saya itu2097152
(~ 2,1 juta). Ini berarti bahwarm
(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,
Ini akan menghapus semua file (berkisar 100 hingga 100000) jika nama file berisi angka dalam urutan berurutan.
sumber
Secara umum Anda memiliki beberapa cara untuk mencapai ini:
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
for
looptidak 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_101
hilang.Biasanya, solusi berdasarkan
find
lebih baik, karena mereka hanya bekerja pada file yang sebenarnya ada (selama penemuan). Namun, ada beberapa perbedaan halus:masih akan meluncurkan
rm
program 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-delete
yang 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:
Jadi dalam hal ini Anda akan menghapus file yang ingin Anda simpan dan meninggalkan file yang seharusnya dihapus.
sumber
Gunakan perintah berikut:
Itu akan menghapus file dari 100 hingga 100000.
Informasi lebih lanjut: Situs
sumber
+
daripada\;
- lihat di sini . Atau, lebih baik lagi, gunakan-delete
perintah find .[100-100000]
karakter hanya cocok dengan satu karakter, sehingga hanya bisa cocok dengan 0 atau 1.