GNU/Linux >> Linux Esercitazione >  >> Linux

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

Bash 4+ testato -Questo è il modo corretto per cercare la dimensione 0:

find /path/to/dir -size 0 -type f -name "*.xml"

Cerca più estensioni di file di dimensione 0:

find /path/to/dir -size 0 -type f \( -iname \*.css -o -iname \*.js \)

Nota:se rimuovi \( ... \) i risultati sarebbero tutti i file che soddisfano questo requisito ignorando quindi la dimensione 0.


In aggiunta alle risposte precedenti:

Se desideri eliminare quei file

find $dir -size 0 -type f -delete

No, non devi preoccuparti di grep.

find $dir -size 0 ! -name "*.xml"

Per stampare i nomi di tutti i file dentro e sotto $dir di dimensione 0:

find "$dir" -size 0

Nota che non tutte le implementazioni di find produrrà l'output per impostazione predefinita, quindi potrebbe essere necessario eseguire:

find "$dir" -size 0 -print

Due commenti sul ciclo finale nella domanda:

Piuttosto che ripetere su ogni altra parola in una stringa e vedere se i valori alternativi sono zero, puoi eliminare parzialmente il problema che stai riscontrando con gli spazi bianchi ripetendo le righe. es:

printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
    test "$size" -eq 0 && echo "$path"; done

Nota che questo fallirà nel tuo caso se uno qualsiasi dei percorsi emessi da ls contiene newline, e questo rafforza 2 punti:non analizzare ls e avere una politica di denominazione sensata che non consente spazi bianchi nei percorsi.

In secondo luogo, per emettere i dati dal ciclo, non è necessario memorizzare l'output in una variabile solo su echo esso. Se lasci semplicemente che il ciclo scriva il suo output su stdout, ottieni la stessa cosa ma eviti di memorizzarlo.


Linux
  1. Come elencare in modo ricorsivo tutti i file e le directory

  2. Trova e copia i file

  3. Trova e rinomina una directory

  4. Come eseguire il grep di una stringa in una directory e in tutte le sue sottodirectory?

  5. elenca/trova tutti i file regolari in tutte le sottodirectory esclusi i file binari

Come trovare il numero di file in una directory e sottodirectory

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

Utilizzare Trova per trovare una determinata directory ed eliminare tutti i file in essa contenuti tranne una directory?

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

Copia di tutti i file all'interno delle sottodirectory e rinomina invece di sovrascrivere

Come trovare tutti i file a zero byte nella directory