423 Stimmen

Wie kann ich unter Linux eine Liste von Dateien mit ihrem absoluten Pfad erstellen?

Ich schreibe ein Shell-Skript, das Dateipfade als Eingabe akzeptiert.

Aus diesem Grund muss ich rekursive Dateilisten mit vollständigen Pfaden erstellen. Zum Beispiel, die Datei bar hat den Pfad:

/home/ken/foo/bar

aber, soweit ich sehen kann, sind beide ls y find geben nur relative Pfadangaben an:

./foo/bar   (from the folder ken)

Es scheint eine offensichtliche Anforderung zu sein, aber ich kann nichts in der find o ls man-Seiten.

Wie kann ich eine Liste der Dateien in der Shell einschließlich ihrer absoluten Pfade erstellen?

16voto

GSM Punkte 346

Befehl: ls -1 -d "$PWD/"*

Dadurch werden die absoluten Pfade der Datei wie unten angegeben.

[root@kubenode1 ssl]# ls -1 -d "$PWD/"*
/etc/kubernetes/folder/file-test-config.txt
/etc/kubernetes/folder/file-test.txt
/etc/kubernetes/folder/file-client.txt

15voto

Jabir Ali Punkte 332

Das können Sie tun

ls -1 |xargs realpath

Wenn Sie einen absoluten oder relativen Pfad angeben müssen, können Sie auch das tun

 ls -1 $FILEPATH |xargs realpath

12voto

Koder95 Punkte 91

Versuchen Sie dies:

find "$PWD"/

Sie erhalten Liste der absoluten Pfade im Arbeitsverzeichnis.

10voto

Gurpreet Punkte 722

En $PWD ist eine gute Option von Matthew oben. Wenn Sie möchten, dass find nur Dateien druckt, können Sie auch die Option -type f hinzufügen, um nur normale Dateien zu suchen. Andere Optionen sind "d" für nur Verzeichnisse usw. In Ihrem Fall wäre es also (wenn ich nur nach Dateien mit .c ext suchen möchte):

find $PWD -type f -name "*.c" 

oder wenn Sie alle Dateien haben wollen:

find $PWD -type f

Hinweis: Sie können keinen Alias für den obigen Befehl erstellen, da $PWD automatisch zu Ihrem Heimatverzeichnis vervollständigt wird, wenn der Alias von der Bash gesetzt wird.

8voto

Trudius Punkte 81

Wenn Sie dem find-Befehl einen absoluten Pfad angeben, wird er die Ergebnisse mit einem absoluten Pfad ausgeben. Wenn Sie also im Ken-Verzeichnis Folgendes eingeben würden:

find /home/ken/foo/ -name bar -print    

(anstelle des relativen Pfades find . -name bar -print )

Sie sollten es bekommen:

/home/ken/foo/bar

Wenn Sie also eine ls -l und den absoluten Pfad zurückgeben möchten, können Sie dem find-Befehl einfach sagen, dass er eine ls -l auf alles, was es findet.

find /home/ken/foo -name bar -exec ls -l {} ;\ 

HINWEIS: Es gibt ein Leerzeichen zwischen {} y ;

Das Ergebnis sieht dann etwa so aus:

-rw-r--r--   1 ken admin       181 Jan 27 15:49 /home/ken/foo/bar

Wenn Sie sich nicht sicher sind, wo sich die Datei befindet, können Sie den Suchort jederzeit ändern. Solange der Suchpfad mit "/" beginnt, erhalten Sie einen absoluten Pfad zurück. Wenn Sie an einem Ort (wie /) suchen, an dem Sie viele "permission denied"-Fehler erhalten, würde ich empfehlen, den Standardfehler umzuleiten, damit Sie die Suchergebnisse tatsächlich sehen können:

find / -name bar -exec ls -l {} ;\ 2> /dev/null

( 2> ist die Syntax für die Shells Borne und Bash, funktioniert aber nicht mit der C-Shell. Möglicherweise funktioniert sie auch in anderen Shells, aber ich weiß nur mit Sicherheit, dass sie in Bourne und Bash funktioniert.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X