Soluzione 1:
find . -maxdepth 1 -type f -exec rm -f {} \;
richiede semplicemente troppo tempo (un exec di rm per file).
questo è molto più efficiente:
find . -maxdepth 1 -type f -print0 | xargs -r0 rm -f
siccome ci vogliono tanti nomi di file come argomenti per rm il più possibile, quindi esegue rm con il prossimo caricamento di nomi di file... può succedere che rm venga chiamato solo 2 o 3 volte.
Soluzione 2:
Nel caso in cui non puoi rimuovere la directory, puoi sempre usare find.
find . -maxdepth 1 -type f -exec rm -f {} \;
Ciò eliminerà tutti i file nella directory corrente e solo la directory corrente (non le sottodirectory).
Soluzione 3:
Entrambi risolveranno il problema. C'è un'analisi delle rispettive prestazioni di ciascuna tecnica qui.
find . -name WHATEVER -exec rm -rf {} \;
o
ls WHATEVER | xargs rm -rf
Il problema deriva da bash che espande "*" con ogni singolo elemento nella directory. Entrambe queste soluzioni funzionano a turno su ciascun file.
Soluzione 4:
Sono stato in grado di farlo eseguendo il backup di un livello:
cd ..
E in esecuzione:
rm directory name -rf
E poi ricreare la directory.
Soluzione 5:
Tutte queste invocazioni find sono molto carine ma raramente ricordo esattamente la nomenclatura necessaria quando sono di fretta:invece uso ls. Come qualcuno menziona, ls . funzionerebbe ma preferisco ls -1 come in:
ls -1 | xargs -n 100 rm -rf
La cifra -n xxx è abbastanza sicura con cui giocare poiché il superamento del massimo verrà corretto automaticamente (se size-max viene superato; vedi -s ) o se viene superato l'args-max per un'app di solito sarà piuttosto ovvio.
Va notato che grep è utile da inserire nel mezzo di questa catena quando si desidera eliminare solo un sottoinsieme di file in una directory di grandi dimensioni e per qualsiasi motivo non si desidera utilizzare find.
Questa risposta presuppone che tu stia utilizzando le utilità principali di Gnu per i tuoi ls, xargs e così via.