GNU/Linux >> Linux Esercitazione >  >> Linux

Elimina tutti i file casuali tranne 1000 in una directory

Elimina tutti i file casuali tranne 1000 in una directory

Codice:

find /path/to/dir -type f -print0 | sort -zR | tail -zn +1001 | xargs -0 rm

Spiegazione:

  1. Elenca tutti i file in /path/to/dir con find;
    • print0 :usa \0 (carattere nullo ) come delimitatore di riga; quindi i percorsi di file contenenti spazi/newline non interrompono lo script
  2. Mescola l'elenco dei file con sort;
    • -z :usa \0 (carattere nullo) come delimitatore, invece di \n (una nuova riga)
    • -R :ordine casuale
  3. Elimina le prime 1000 righe dall'elenco casuale con tail;
    • -z :tratta l'elenco come delimitato da zero (come con sort )
    • -n +1001 :mostra le righe che iniziano da 1001 (ovvero ometti le prime 1000 righe)
  4. xargs -0 rm - rimuovere i file rimanenti;
    • -0 :delimitato da zero, di nuovo

Perché è meglio della soluzione donchisciottesca*:

  1. Funziona con nomi di file contenenti spazi/newline.
  2. Non tenta di creare alcuna directory (che potrebbe già esistere, tra l'altro)
  3. Non sposta alcun file, non tocca nemmeno i 1000 "file fortunati" oltre a elencarli con find .
  4. Evita di perdere un file nel caso in cui l'output di find non termina con \n (nuova riga) per qualche motivo.

* - credito a donchisciottesco per | sort -R | head -1000 , mi ha dato un punto di partenza.


Linux
  1. Rendere tutti i nuovi file in una directory accessibili a un gruppo?

  2. Eliminare tutti i file in una directory il cui nome non corrisponde a una riga in un elenco di file?

  3. Ottieni tutti i file tranne i file nell'array - Bash?

  4. Come modificare tutte le occorrenze di una parola in tutti i file in una directory

  5. comando linux per svuotare tutti i file di una directory

Script Bash per eliminare tutti i file tranne N quando sono ordinati alfabeticamente

Trova tutti i file a zero byte nella directory e nelle sottodirectory

Rimuovi il repository Git, ma mantieni tutti i file

Elimina tutti i file tranne i 3 più recenti nello script bash

Elimina i file corrispondenti in tutte le sottodirectory

Visualizzare tutti i file nella directory di un sito web?