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 dils
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 NUMxargs
: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