GNU/Linux >> Znalost Linux >  >> Linux

Najděte všechny nulabajtové soubory v adresáři a podadresářích

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í.


Linux
  1. Jak zjistit počet souborů v adresáři a podadresářích

  2. Jak najít soubor v Linuxu ve všech adresářích rekurzivně

  3. Použijte Najít k nalezení určitého adresáře a odstranění všech souborů v něm kromě jednoho adresáře?

  1. Rekurzivně vypisujte všechny soubory v adresáři včetně souborů v adresářích symbolických odkazů

  2. Najděte a přejmenujte adresář

  3. Jak grepovat řetězec v adresáři a všech jeho podadresářích?

  1. Odstraňte odpovídající soubory ve všech podadresářích

  2. Jak mohu rekurzivně zkopírovat všechny soubory pdf v adresáři (a jeho podadresářích) do jednoho výstupního adresáře?

  3. Jak odstranit všechny soubory v adresáři kromě některých?