Wie kann ich mit ls Dateien nach Typ auflisten?

20

Wenn ich den lsBefehl mit der Option verwende -l, gibt die erste Buchstabenfolge die Informationen zu jeder Datei an, und der erste Buchstabe in dieser Zeichenfolge gibt den Dateityp an. ( d= Verzeichnis, -= Standarddatei, l= Link usw.)

Wie kann ich die Dateien nach diesem Anfangsbuchstaben filtern?

dziadek1990
quelle
2
Denken Sie, was Sie wollen , ist dies: superuser.com/a/109542
devnull

Antworten:

9

Sie können alles außer Verzeichnissen auf folgende grepWeise herausfiltern :

ls -l | grep '^d'

Das ^zeigt an, dass sich das Muster am Anfang der Zeile befindet. Ersetzen Sie dmit -, letc., soweit zutreffend.

Sie können natürlich auch andere Befehle verwenden, um direkt nach bestimmten Typen zu suchen (z. B. find . -maxdepth 1 -type d) oder ls -l | sortähnliche Typen anhand dieses ersten Zeichens zu gruppieren. Wenn Sie jedoch filtern möchten, sollten Sie grepnur die entsprechenden Zeilen aus der Ausgabe auswählen.

Anthon
quelle
Beachten Sie, dass Sie Symlinks verwenden möchten ls -lL. -LFolgen Sie symlinks, um anzuzeigen, ob es mit einem Verzeichnis oder einer Datei verknüpft ist.
Nux
8

Wenn Sie alle Ausgaben anzeigen möchten, aber Dateien ähnlichen Typs zusammen aufgelistet haben, können Sie die Ausgabe nach dem ersten Zeichen jeder Zeile sortieren:

ls -l | sort -k1,1
Joseph R.
quelle
Irgendein Grund für die Ablehnung?
Joseph R.
1
Wahrscheinlich aufgrund der Verwendung einer Textverarbeitungsroutine wird die Bearbeitung von Klartext bei bestimmten Entwicklertypen (wie den meisten meiner Kollegen ...) als "uncool" oder "falsch" empfunden . Angesichts einer positiven Bewertung für eine einfache und korrekte Antwort.
Mark K Cowan
8

Der Befehl lsbehandelt Dateinamen , die in den Verzeichnisdatenstrukturen aufgezeichnet sind. Es kümmert sich also nicht wirklich um die Datei selbst, einschließlich des "Typs" einer Datei.

Ein Befehl, der sich besser für die Bearbeitung von Dateien eignet , nicht nur für die Namen find. Es gibt eine Option, die Ihre Frage zum Filtern der Liste nach Dateityp direkt beantwortet.

Dies gibt eine Auflistung des aktuellen Verzeichnisses, ähnlich wie ls -l:

find . -maxdepth 1 -ls

Standardmäßig werden findVerzeichnisse rekursiv aufgelistet, was deaktiviert wird, indem die Suchtiefe auf 1 begrenzt wird.
Sie können das weglassen ., aber ich habe es eingefügt, um anzuzeigen, dass die Verzeichnisse vor den Optionen aufgelistet werden müssen.

Mit -typekönnen Sie nach Dateityp filtern, der als foder dfür einfache Dateien oder Verzeichnisse ausgedrückt wird :

find . -maxdepth 1 -type d -ls

Es gibt andere Filterwerte für -type, insbesondere lfür symbolische Links.
Beachten Sie, dass es bei Symlinks eine Komplikation
gibt : In diesem Fall gibt es zwei Dateitypen: leinen Symlink und so etwas wie fden Typ der verknüpften Datei. Es gibt Optionen, mit denen Sie festlegen können, wie Sie damit umgehen möchten.


Von man find:

    -type c
           File is of type c:

           b      block (buffered) special

           c      character (unbuffered) special

           d      directory

           p      named pipe (FIFO)

           f      regular file

           l      symbolic link; this is never true if the  -L  option
                  or  the -follow option is in effect, unless the sym‐
                  bolic link is broken.  If you  want  to  search  for
                  symbolic links when -L is in effect, use -xtype.

           s      socket

           D      door (Solaris)

und relevant für den Umgang mit symbolischen Links:

    -xtype c
           The  same as -type unless the file is a symbolic link.  For
           symbolic links: if the -H or -P option was specified,  true
           if the file is a link to a file of type c; if the -L option
           has been given, true if c is `l'.  In other words, for sym‐
           bolic  links, -xtype checks the type of the file that -type
           does not check.

und

    -P     Never follow symbolic links.  This is  the  default  behav‐
           iour.  When find examines or prints information a file, and
           the file is a symbolic link, the information used shall  be
           taken from the properties of the symbolic link itself.


    -L     Follow symbolic links.  When find examines or prints infor‐
           mation about files, the information  used  shall  be  taken
           from  the  properties of the file to which the link points,
           not from the link itself (unless it is  a  broken  symbolic
           link  or  find  is  unable to examine the file to which the
           link points).  Use of this option implies -noleaf.  If  you
           later  use  the -P option, -noleaf will still be in effect.
           If -L is in effect and find discovers a symbolic link to  a
           subdirectory during its search, the subdirectory pointed to
           by the symbolic link will be searched.

           When the -L option is in effect, the -type  predicate  will
           always  match  against the type of the file that a symbolic
           link points to rather than the link itself (unless the sym‐
           bolic  link  is  broken).   Using  -L causes the -lname and
           -ilname predicates always to return false.


    -H     Do not follow symbolic links, except while  processing  the
           command  line  arguments. [...]
Volker Siegel
quelle
2

Wenn Sie die Ordner aus den anderen Dateitypen bestellen möchten, können Sie dies tun

ls --group-directories-first

Ansonsten muss man die Ausgabe von ls -l durch sort oder grep leiten, wie von Anthon beantwortet

Stian Hvatum
quelle
2
ls -l | awk '/^d/{print $NF}

awk fängt alles ab, was mit d beginnt. Da d für Verzeichnis steht, müssen Sie das letzte Feld drucken, um den Verzeichnisnamen aufzulisten

Hackaholic
quelle
1
ls -l | sort 

Dadurch wird das Ergebnis nach der alphabetischen Reihenfolge der einzelnen Ergebnisse sortiert. Wenn das erste Zeichen das gewünschte Kriterium ist, ist es das. Wenn Sie nur die Dateinamen benötigen, können Sie versuchen:

ls -l | sort | cut -f 2 -d ' ' 

Oder etwas Ähnliches (dieser Befehl sortiert und teilt dann jede Zeile mit dem Leerzeichen und gibt dann die zweite Gruppe zurück.

Fabio
quelle
Vielen Dank für die Bearbeitung Tico, es ist schwer zu sehen, was Sie auf dem Telefon eingeben.
Fabio