Risposte:
Se i nomi dei file sono numerati in sequenza, basta eseguire il comando seguente:
rm fileName_{100..100000}
execchiamata al numero di argomenti che un processo può avere. Puoi recuperarlo con getconf ARG_MAX. Ad esempio sul mio sistema lo è 2097152(~ 2.1 milioni). Ciò significa che rm(che non è un built-in) fallirà con più di tanti file. I comandi integrati non presentano questo problema, né le altre soluzioni proposte.
Puoi provare anche questo comando,
for i in $(seq 100 100000); do rm fileName_$i; done
Eliminerà tutti i file (intervalli da 100 a 100000) se il nome file contiene numeri in un ordine sequenziale.
In generale hai diversi modi per raggiungere questo obiettivo:
rm fileName_{100..100000}
sarà espanso dalla shell in circa 100.000 nomi di file. Se il nome di base è un percorso lungo e il numero è abbastanza alto, con questo approccio potresti effettivamente superare la lunghezza massima di una riga di comando.
Il forciclo
for i in $(seq 100 100000); do rm fileName_$i; done
non soffre di questo problema, ma è un modo relativamente lento di eliminare i file, poiché la shell deve eseguire la sostituzione delle variabili e avviare rm circa 100.000 volte.
Entrambi i metodi sopra potrebbero causare avvisi se alcuni file, ad esempio, filename_101fossero mancanti.
Di solito, le soluzioni basate su findsono migliori, poiché funzionano solo su file che sono effettivamente lì (durante il rilevamento). Tuttavia, ci sono alcune sottili differenze:
find . -name 'fileName_[100-100000]' -exec rm {} \;
sarà ancora lanciare il rmprogramma di circa 100.000 volte, durante la sostituzione della finale \;da +cercherà di ridurre al minimo il numero di sottoprocessi. Entrambi i metodi saranno probabilmente (molto o un po ') più lenti dell'uso -deleteche non utilizza affatto comandi esterni ma invoca invece chiamate di sistema.
Tuttavia, controlla sempre prima se il modello corrisponde effettivamente ai file che desideri scegliere come target:
stefan@tuxedo ~ % mkdir askubuntu
stefan@tuxedo ~ % touch askubuntu/filename_{1..1000}
stefan@tuxedo ~ % find askubuntu -name 'filename_[100-1000]'
askubuntu/filename_1
Quindi in questo caso dovresti eliminare un file che desideri conservare e lasciare i file che avrebbero dovuto essere rimossi.
Utilizzare il comando seguente:
find . -name 'fileName_[100-100000]' -exec rm {} \;
Ciò eliminerà i file da 100 a 100000.
Ulteriori informazioni: Sito
[100-100000] classe di caratteri corrisponde solo a un singolo carattere, quindi può corrispondere solo a 0 o 1.
{x..y}l'intero elenco. Ad esempio, se lo si utilizzaecho test{1..3}verrà espansoecho test1 test2 test3e quindi eseguito. Come puoi vedere, stampatest1 test2 test3. Allo stesso modo, se{x..y}non è collegato a nessun argomento, inserirà semplicemente i numeri lì. Ad esempioecho test {1..3}stamperà e bastatest 1 2 3.