Holen Sie sich den absoluten Pfad der Dateien mit dem Befehl 'find'


25

Gibt es eine Möglichkeit, den absoluten Pfad einer zu durchsuchenden Datei abzurufen?

Beispielsweise:

find .. -name "filename"

Es gibt mir Ergebnisse wie, ../filenameaber ich möchte den vollständigen Pfad.

Ich muss im übergeordneten Verzeichnis und seinen untergeordneten Verzeichnissen nach einer bestimmten Datei suchen, die ich später in einem anderen Skript verwenden werde.

Vielen Dank


Antworten:


15

Versuchen Sie etwas wie:

find "$(cd ..; pwd)" -name "filename"

Danke, ich habe gerade getestet $(cd ..; pwd). Hier funktioniert es in Ordnung, aber wenn ich es alleine in einem Terminal mache, kann ich das übergeordnete Verzeichnis nicht abrufen ... Ich erhalte "Bash: <Verzeichnis>: Ist ein Verzeichnis. Und wenn ich es $(cd ..; echo "something")erhalte" etwas: kein Befehl "
JorgeeFG

Meinst du wie ein separater Befehl? Dann müssten Sie das Dollarzeichen weglassen:(cd ..; pwd)
Scrutinizer

Danke, das war es. Irgendwelche Hinweise, warum ich das $ entfernen soll, wie wirkt es sich auf die Subshell aus?
JorgeeFG

1
Ja ( ... )bedeutet in einer Subshell ausführen, die Ausgabe wird nach stdout geschrieben. $( ... )steht für "Command Substitution". Letzteres kann verwendet werden, als wäre es eine variable Erweiterung.
Scrutinizer

find / -name "filename"
Panther

12

Probieren Sie die folgenden -execOptionen aus find:

find .. -name "filename" -exec readlink -f {} \;

Hinweis: readlinkGibt den Wert eines symbolischen Links oder eines kanonischen Dateinamens aus.


Dies ruft readlink für jede Datei auf, so dass es sehr unwirksam ist.
16.

9

Sie können die bashTilde-Erweiterung verwenden, um den absoluten Pfad des aktuellen Arbeitsverzeichnisses abzurufen. Auf diese Weise wird auch findder absolute Pfad für die Ergebnisse gedruckt:

find ~+ -type f -name "filename"

Wenn in ausgeführt ~/Desktop, wird dies auf erweitert

find /home/yourusername/Desktop -type f -name "filename"

und druckt Ergebnisse wie:

/home/yourusername/Desktop/filename

Wenn Sie diesen Ansatz mit dem übergeordneten Verzeichnis des aktuellen Arbeitsverzeichnisses verwenden möchten, müssen Sie cdvor dem Aufruf Folgendes tun find:

cd .. && find ~+ -type f -name "filename"

7

Der einfachste Weg ist

find "$(pwd -P)" -name "filename"

Ja! Oderfind `pwd -P` -name "filename"
Apollys unterstützt Monica

Dadurch werden Dateien im aktuellen Verzeichnis gefunden, die nicht vom übergeordneten Verzeichnis stammen.
16.

1

Auch mit PWD können Sie das vollständige Verzeichnis anzeigen. Pwd zeigt Ihnen alle Ihre Verzeichnisse, in denen Sie sich befinden, wie das Erweitern des Dateinamens. Hoffe das hat geholfen.


1

Dies hat bei mir funktioniert, wird aber nur das erste Mal zurückgegeben.

realpath $(find . -type f -name filename -print -quit)

Vollständige Pfade für alle Vorkommen abrufen (wie von Sergiy Kolodyazhnyy vorgeschlagen)

find . -type f -name filename | xargs realpath

Vorheriger Kommentar entfernt, +1, guter Job @Wyrmwood
Sergiy Kolodyazhnyy

1

Letzte Verzeichniskomponente mit Parameter Expansion entfernen .

find "${PWD%/*}" -name 'filename'

Ein Beispiel, wie Sie Mapfile verwenden können , um die Ausgabe von Find für die spätere Verwendung in einem indizierten Array zu speichern.

mapfile -t -d '' < <(find ${PWD%/*} -name 'filename' -print0)

(Wenn kein Arrayname angegeben ist, ist MAPFILE der Standard-Arrayname.)

for i in "${MAPFILE[@]}"; do
    echo "$((n++)) $i"
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.