it-swarm.com.de

Wie listet man bestimmte Typen von Dateien in rekursiven Verzeichnissen in der Shell auf?

Wie können wir bestimmte Dateitypen finden, d. H. Doc pdf-Dateien in verschachtelten Verzeichnissen.

befehl Ich habe versucht:

$ ls -R | grep .doc

wenn es jedoch einen Dateinamen wie alok.doc.txt gibt, zeigt der Befehl auch das an, was offensichtlich nicht das ist, was ich will. Welchen Befehl sollte ich stattdessen verwenden?

35
Kumar Alok

Wenn Sie mit "ls" und "grep" komfortabler sind, können Sie mit einem regulären Ausdruck im Befehl "grep" tun, was Sie möchten "file.doc.txt" ausschließen):

ls -R |grep "\.doc$"

Weitere Informationen zur Verwendung von grep mit regulären Ausdrücken finden Sie in the man .

57
Benoit Courtine

Die Ausgabe von ls-Befehlen ist hauptsächlich für das Lesen durch Menschen gedacht. Für erweiterte Abfragen zur automatisierten Verarbeitung sollten Sie den leistungsfähigeren Befehl find verwenden:

find /path -type f \( -iname "*.doc" -o -iname "*.pdf" \) 

Als ob Sie Bash 4.0 ++ haben

#!/bin/bash
shopt -s globstar
shopt -s nullglob
for file in **/*.{pdf,doc}
do
  echo "$file"
done
30
ghostdog74

Einige der anderen Methoden, die verwendet werden können:

echo *.{pdf,docx,jpeg}

stat -c %n * | grep 'pdf\|docx\|jpeg'

3

Wir hatten eine ähnliche Frage. Wir wollten eine Liste mit Pfaden aller Konfigurationsdateien im Verzeichnis etc. Das hat funktioniert:

find /etc -type f \( -iname "*.conf" \)

Es gibt eine schöne Liste aller .conf-Dateien mit ihrem Pfad. Ausgabe sieht wie folgt aus:

/etc/conf/server.conf

Wir wollten jedoch mit ALLEN Dateien etwas tun, wie zum Beispiel grep diese Dateien, um ein Wort oder eine Einstellung in allen Dateien zu finden. Also benutzen wir

find /etc -type f \( -iname "*.conf" \) -print0 | xargs -0 grep -Hi "ServerName"

aLLE Konfigurationsdateien in/etc zu finden, die eine Einstellung wie "ServerName" enthalten. Die Ausgabe sieht folgendermaßen aus:

/etc/conf/server.conf: ServerName "default-118_11_170_172"

Ich hoffe, Sie finden es nützlich.

Sid

find . | grep "\.doc$"

Dies wird auch den Pfad anzeigen.

1
Leo Bastin

Wenn Sie das Platzhalterzeichen * bevorzugen (nicht ganz den Regex-Vorschlägen), können Sie ls mit dem Flag -l verwenden, um eine Datei pro Zeile (wie grep) und das Flag -R wie Sie aufzulisten. Dann können Sie mit *.doc I.E die Dateien angeben, nach denen Sie suchen möchten. Entweder

ls -l -R *.doc

oder wenn Sie möchten, dass die Dateien in weniger Zeilen aufgelistet werden.

ls -R *.doc
0
Will C