Testováno na Bash 4+ – Toto je správný způsob hledání velikosti 0:
find /path/to/dir -size 0 -type f -name "*.xml"
Vyhledejte více přípon souborů o velikosti 0:
find /path/to/dir -size 0 -type f \( -iname \*.css -o -iname \*.js \)
Poznámka:Pokud byste odstranili \( ... \), výsledky by byly všechny soubory, které splňují tento požadavek, takže velikost 0 bude ignorována.
Kromě výše uvedených odpovědí:
Pokud chcete tyto soubory smazat
find $dir -size 0 -type f -delete
Ne, nemusíte obtěžovat grepa.
find $dir -size 0 ! -name "*.xml"
Chcete-li vytisknout názvy všech souborů v a pod $dir o velikosti 0:
find "$dir" -size 0
Upozorňujeme, že ne všechny implementace find
ve výchozím nastavení vytvoří výstup, takže možná budete muset udělat:
find "$dir" -size 0 -print
Dva komentáře k poslední smyčce v otázce:
Namísto opakování každého druhého slova v řetězci a sledování, zda jsou alternativní hodnoty nulové, můžete částečně eliminovat problém, který máte s mezerami, iterací přes řádky. např.:
printf '1 f1\n0 f 2\n10 f3\n' | while read size path; do
test "$size" -eq 0 && echo "$path"; done
Všimněte si, že to ve vašem případě selže, pokud některá z cest vydaných pomocí ls obsahuje nové řádky, a to posiluje 2 body:neanalyzujte ls
a mají rozumné zásady pro pojmenování, které nepovolují mezery v cestách.
Za druhé, pro výstup dat ze smyčky není potřeba ukládat výstup do proměnné pouze do echo
to. Pokud jednoduše necháte smyčku zapsat svůj výstup do stdout, dosáhnete toho samého, ale vyhnete se jeho ukládání.