Dies ähnelt dieser Frage , aber ich möchte den Pfad relativ zum aktuellen Verzeichnis in Unix aufnehmen. Wenn ich folgendes mache:
ls -LR | grep .txt
Es enthält nicht die vollständigen Pfade. Zum Beispiel habe ich die folgende Verzeichnisstruktur:
test1/file.txt
test2/file1.txt
test2/file2.txt
Der obige Code gibt Folgendes zurück:
file.txt
file1.txt
file2.txt
Wie kann ich mithilfe von Unix-Standardbefehlen die Pfade relativ zum aktuellen Verzeichnis einschließen?
find
oder erforderntree
. Ich ssh'ing in ein Android-Gerät, wo ich nur zu haben scheintls
, und keines dieser anderen Tools: /Antworten:
Verwenden Sie find:
Auf Systemen, die GNU find verwenden, wie bei den meisten GNU / Linux-Distributionen, können Sie den -print weglassen.
quelle
find $(pwd) -name \*.txt
-path "*docs/*.txt"
anstelle von verwendet werden-name
.-wholename
ist das gleiche wie-path
-type f
diese Option, um nur Dateien und keine Verzeichnisse, symbolischen Links usw. zurückzugeben-name "*.txt"
wird NICHT übereinstimmenfile.TXT
- verwenden Sie-iname "*.txt"
stattdessen immer, wobei die Groß- und Kleinschreibung nicht berücksichtigt wird.Verwenden
tree
mit-f
(vollständiger Pfad) und-i
(keine Einrückungslinien):Sie können dann
grep
die gewünschten herausfiltern.Wenn der Befehl nicht gefunden wird, können Sie ihn installieren:
Geben Sie den folgenden Befehl ein, um den Baumbefehl unter RHEL / CentOS und Fedora Linux zu installieren:
Wenn Sie Debian / Ubuntu, Mint Linux verwenden, geben Sie den folgenden Befehl in Ihr Terminal ein:
quelle
Versuchen Sie es
find
. Sie können es genau in der Manpage nachschlagen, aber es ist irgendwie so:find [start directory] -name [what to find]
Also für dein Beispiel
find . -name "*.txt"
sollte dir geben, was du willst.
quelle
Sie könnten stattdessen find verwenden:
quelle
Das macht den Trick:
ls -R1 $PWD | while read l; do case $l in *:) d=${l%:};; "") d=;; *) echo "$d/$l";; esac; done | grep -i ".txt"
Aber es tut dies, indem es mit dem Parsen von "sündigt"
ls
, was von den GNU- und Ghostscript-Communities als schlechte Form angesehen wird.quelle
ls
da dies im Allgemeinen zu Fehlern führt. Der fragliche Satz versuchte das herauszurufen. Es hatte auch einen Witz, den ich entfernt habe.'sed' löscht 'your_path' aus allen 'find'-Ergebnissen. Und Sie erhalten relativ zum 'DIR'-Pfad.
quelle
Verwenden Sie den Befehl pwd, um die tatsächlichen vollständigen Pfaddateinamen der gewünschten Dateien mit dem Befehl find abzurufen:
quelle
Hier ist ein Perl-Skript:
Verwendung:
quelle
Sie können eine Shell-Funktion erstellen, z. B. in Ihrem
.zshrc
oder.bashrc
:Der erste würde natürlich nur mit einzelnen Dateien funktionieren.
quelle
Suchen Sie die Datei "Dateiname" in Ihrem Dateisystem und starten Sie die Suche im Stammverzeichnis "/". Der "Dateiname"
quelle
Wenn Sie die Details beibehalten möchten, die in Ihrer Ausgabe mit ls wie Dateigröße usw. enthalten sind, sollte dies funktionieren.
quelle
In der Fischschale können Sie dies tun, um alle PDFs rekursiv aufzulisten, einschließlich derjenigen im aktuellen Verzeichnis:
Entfernen Sie einfach 'pdf', wenn Sie Dateien eines beliebigen Typs möchten.
quelle
Sie können diese Funktionalität folgendermaßen implementieren.
Verwenden Sie zunächst den Befehl ls, der auf das Zielverzeichnis verweist. Später filtern Sie mit dem Befehl find das Ergebnis daraus. Aus Ihrem Fall klingt es so - immer beginnt der Dateiname mit einem Wort
file***.txt
quelle
In meinem Fall mit Baumbefehl
Relativer Pfad
Absoluter Pfad
quelle