GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso eliminare tutti i file da una directory quando segnala che l'elenco degli argomenti è troppo lungo

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.


Linux
  1. Come trovare un file in Linux in tutte le directory in modo ricorsivo

  2. Come eliminare tutti i file con un'estensione particolare in una cartella particolare?

  3. Impossibile rimuovere i file dalla directory con l'errore "Elenco di argomenti troppo lungo"

  4. Elenca in modo ricorsivo tutti i file in una directory, inclusi i file nelle directory dei collegamenti simbolici

  5. Errore elenco argomenti troppo lungo per i comandi rm, cp, mv

Come elencare in modo ricorsivo tutti i file e le directory

bash:/bin/tar:elenco di argomenti troppo lungo durante la compressione di molti file con tar

Come posso elencare solo i file non vuoti usando ls?

Come trovare tutti i file a zero byte nella directory

come posso eliminare in modo ricorsivo le directory vuote nella mia home directory?

Come posso eliminare in modo ricorsivo tutti i file e le directory vuoti in Linux?