GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Finden Sie alle Null-Byte-Dateien in Verzeichnissen und Unterverzeichnissen

Bash 4+ getestet -Dies ist der richtige Weg, um nach Größe 0 zu suchen:

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

Suche nach mehreren Dateierweiterungen der Größe 0:

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

Hinweis:Wenn Sie das \( ... \) entfernen, wären die Ergebnisse alle Dateien, die diese Anforderung erfüllen, daher wird die Größe 0 ignoriert.


Als Ergänzung zu den obigen Antworten:

Wenn Sie diese Dateien löschen möchten

find $dir -size 0 -type f -delete

Nein, Sie müssen sich nicht um grep kümmern.

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

So drucken Sie die Namen aller Dateien in und unterhalb von $dir der Größe 0:

find "$dir" -size 0

Beachten Sie, dass nicht alle Implementierungen von find wird standardmäßig eine Ausgabe erzeugen, daher müssen Sie möglicherweise Folgendes tun:

find "$dir" -size 0 -print

Zwei Kommentare zur letzten Schleife in der Frage:

Anstatt jedes zweite Wort in einer Zeichenfolge zu durchlaufen und zu prüfen, ob die alternativen Werte Null sind, können Sie das Problem, das Sie mit Leerzeichen haben, teilweise beseitigen, indem Sie über Zeilen iterieren. zB:

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

Beachten Sie, dass dies in Ihrem Fall fehlschlägt, wenn einer der von ls ausgegebenen Pfade Zeilenumbrüche enthält, und dies verstärkt 2 Punkte:Analysieren Sie ls nicht , und haben eine vernünftige Benennungsrichtlinie, die keine Leerzeichen in Pfaden zulässt.

Zweitens, um die Daten aus der Schleife auszugeben, ist es nicht notwendig, die Ausgabe in einer Variablen zu speichern, nur in echo es. Wenn Sie die Schleife einfach ihre Ausgabe auf stdout schreiben lassen, erreichen Sie dasselbe, vermeiden jedoch das Speichern.


Linux
  1. Alle Dateien in einem Verzeichnis rekursiv auflisten, einschließlich Dateien in Symlink-Verzeichnissen

  2. Entpacken Sie alle Dateien in einem Verzeichnis

  3. Wie kann ich alle PDF-Dateien in einem Verzeichnis (und seinen Unterverzeichnissen) rekursiv in ein einziges Ausgabeverzeichnis kopieren?

  4. Alle Dateien in Unterverzeichnissen kopieren und umbenennen statt überschreiben

  5. So finden Sie alle Null-Byte-Dateien im Verzeichnis

Benennen Sie alle Dateien und Verzeichnisnamen in Linux in Kleinbuchstaben um

Shell-Skript:Dateien in Verzeichnisse und Unterverzeichnisse sortieren?

Verwenden Sie Suchen, um ein bestimmtes Verzeichnis zu finden und alle darin enthaltenen Dateien außer einem Verzeichnis zu löschen?

Linux:Anzahl der Dateien in einem Verzeichnis und Unterverzeichnissen finden

listet/findet alle regulären Dateien in allen Unterverzeichnissen außer Binärdateien

Wie lösche ich alle Dateien in einem Verzeichnis außer einigen?