Wie kann ich mit ls nur nicht leere Dateien auflisten?


Antworten:


49

Ich würde find dirname -not -empty -lsunter der Annahme, GNU finden.


1
Möchte jemand die Ablehnung erklären?
Daenyth,

Wahrscheinlich, weil der Fragesteller darum gebeten hat lsund du es benutzt hast find;) Ich habe es jedoch erhöht ... Es ist eine richtige Lösung
BloodPhilia

2
Wenn Sie "find. -Not -empty -ls" verwenden, wird auch das aktuelle Verzeichnis einbezogen (dh "." In der Ausgabe). Um nur die aktuellen Dateien einzubeziehen, verwenden Sie "find. -Type f -not -empty -ls".
User672009

19

Dies ist ein Job, bei dem man herausfindet, dass er nicht mächtig genug ist.

find -maxdepth 1 -size +0 -print

-maxdepth 1 - Dies weist find an, nur das aktuelle Verzeichnis zu durchsuchen, zu entfernen, um in allen Unterverzeichnissen zu suchen, oder die Zahl zu ändern, um 2, 3 oder mehr Ebenen zu verringern.

-size +0Dies weist find an, nach Dateien mit einer Größe von mehr als 0Bytes zu suchen . 0kann zu jeder möglicher Größe geändert werden, die Sie wünschen würden.

-print weist find an, den vollständigen Pfad zu der gefundenen Datei auszudrucken

Bearbeiten:
Späte Hinzufügung: Sie sollten wahrscheinlich auch den -type fobigen Schalter hinzufügen . Dies weist find an, nur Dateien zu finden. Und wie in den Kommentaren unten erwähnt, wird der -printSchalter nicht wirklich benötigt.


1
Um eine Warnung zu vermeiden, sollten Sie -maxdepth 1vorher platzieren -size +0. Auch -printist die Standardaktion, so dass es nicht erforderlich ist.
CYRUS

@ Cyrus - Keine Warnungen für mich (Cygwin)
Nifle

Die Implementierungen findvariieren stark in Bezug auf die gültigen Optionen und die möglichen Ziele. GNU find(was furchtbar häufig vorkommt) wird eine Warnung ausgeben , wenn Sie es -sizevorher setzen -maxdepth.
Telemachus


8
ls -l | awk '{if ($5 != 0) print $9}'

Wenn Sie beabsichtigen zu verwenden ls, benötigen Sie ein wenig Hilfe von awk.


7

Ls hat fast keine Möglichkeit, Dateien zu filtern: Das ist nicht seine Aufgabe. Das Filtern von Dateien ist die Aufgabe der Shell für einfache Fälle (durch Globbing) und das Suchen für komplexe Fälle.

In zsh können Sie das LGlobbing-Qualifikationsmerkmal so einstellen, dass nur Dateien mit einer Größe von> 0 erhalten bleiben (das .Qualifikationsmerkmal beschränkt sich auf reguläre Dateien):

ls *(.L+0)

Benutzer anderer Shells müssen find verwenden. Mit GNU find (wie meistens unter Linux):

find -maxdepth 1 -type f ! -empty -exec ls {} +

Ein POSIX-konformer Weg ist:

find . -type f -size +0c -exec ls {} + -o -name . -o -prune

Wenn lsnicht nur ein Beispiel und Sie lediglich die Absicht , visuelle Inspektion, könnten Sie sortieren nach Größe: ls -S.


3
 $ find /* -type f ! -size 0

funktioniert besser, wenn Sie nicht nur Verzeichnisse, sondern alle nicht leeren Dateien möchten.


1

Bash 4.0+

shopt -s globstar
shopt -s nullglob
for file in **/*; do  test -f "$file" && [[ -s "$file" ]] && echo "$file"; done
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.