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.