GNU/Linux >> Linux Esercitazione >  >> Linux

Trova ed elimina il file più vecchio se ci sono più di X file in una directory in Linux

Ho molti film nel mio disco rigido e li ho archiviati in cartelle diverse in base al genere di film. Ora, voglio mantenere solo un numero particolare di file di film in una directory ed eliminare tutto il resto. Ancora più importante, voglio eliminare solo i file più vecchi. In questo modo posso mantenere un numero costante di file in ogni cartella. Dal momento che ho così tanti file sparsi in molte cartelle, è un processo che richiede molto tempo per passare a ciascuna cartella, cercare i file più vecchi ed eliminarli manualmente uno per uno. Mentre cercavo un modo semplice per farlo, ho trovato la seguente soluzione. Continuare a leggere. Non è così difficile.

Trova ed elimina il file più vecchio in una directory in Linux

Diciamo che volevi trovare ed eliminare il file più vecchio se sono presenti più di 10 file in una directory. Come faresti? È molto semplice.

Prendi la seguente directory denominata otechnix come esempio. Controlliamo quanti file ci sono in questa directory usando il comando:

$ find ostechnix/ -type f | wc -l

Oppure cd in quella directory ed esegui:

$ ls | wc -l

Risultato di esempio:

33

Come puoi vedere nell'esempio sopra, la directory otechnix contiene 33 file. Non voglio 33 file in questa directory. Voglio eliminare tutti i file più vecchi e conservare solo 10 file.

Ora, troviamo ed eliminiamo i file più vecchi in questa directory se contiene più di 10 file. Per farlo, vai in quella directory:

$ cd ostechnix

E, esegui il seguente comando:

$ ls -1t | tail -n +11 | xargs rm

Oppure,

$ ls -1t | tail -n +11 | xargs rm -f

Dove,

  • ls :elenca il contenuto della directory.
  • -1t :  1(Numero uno ) indica che l'output di ls dovrebbe essere un file per riga. t indica ordina i contenuti per ora di modifica, dal più recente.
  • tail :Visualizza l'ultima parte dei file.
  • -n +11 :emette le ultime NUM righe, invece delle ultime 10; oppure usa -n +NUM per l'output che inizia con la riga NUM
  • xargs :crea ed esegue righe di comando dallo standard input.
  • rm -f :rimuove file o directory. f indica ignora file e argomenti inesistenti, non richiede mai. Significa che questo comando non visualizzerà alcun messaggio di errore se sono presenti meno di 10 file.
  • | - È un gasdotto. È generalmente una sequenza di uno o più comandi separati da uno degli operatori di controllo | o |& .

Quindi, il comando sopra eliminerà i file più vecchi se ci sono più di 10 file nella directory di lavoro corrente. Per verificare quanti file ci sono nella directory dopo aver eliminato i file più vecchi, esegui semplicemente:

$ ls | wc -l

Aggiornamento:

Se i nomi dei file contengono spazi, il comando precedente non funzionerà. Perché, il xargs il comando prende gli spazi bianchi (tabulazioni, spazi, nuove righe) come delimitatori. In tal caso, puoi restringere il campo solo per i caratteri della nuova riga ('\n' ) con -d opzione come di seguito:

$ ls -1t | tail -n +11 | xargs -d '\n' rm -f

Spero che questo aiuti.

Lettura consigliata: 

  • Come trovare ed eliminare file più vecchi di X giorni in Linux
  • Elimina i file a cui non è stato possibile accedere per un dato momento su Linux

Linux
  1. Rinomina tutti i file e i nomi delle directory in minuscolo in Linux

  2. Come eliminare file e directory in Linux dalla riga di comando

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

  4. Elimina file e directory in base ai loro nomi. Nessun file o directory con questo nome?

  5. Linux:come scoprire se ci sono file in una cartella ed uscire di conseguenza (in Ksh)?

Come copiare file e directory in Linux

Come contare i file nella directory in Linux

Come trovare ed eliminare file duplicati in Linux

I 3 migliori strumenti per trovare ed eliminare file duplicati in Linux

Come eliminare file più vecchi di giorni specificati in Linux

Linux:trova il numero di file in una directory e sottodirectory