Ich benötige eine Datei (vorzugsweise eine .list-Datei), die den absoluten Pfad jeder Datei in einem Verzeichnis enthält.
Beispiel dir1: file1.txt file2.txt file3.txt
listOfFiles.list
:
/Users/haddad/dir1/file1.txt
/Users/haddad/dir1/file2.txt
/Users/haddad/dir1/file3.txt
Wie kann ich das unter Linux / Mac erreichen?
command-line
ls
filenames
arabian_albert
quelle
quelle
ls -d -1 $PWD/*
-1
Option garantiert, dass Sie einen Dateinamen pro Zeile erhaltenls
Erkennt, ob die Ausgabe in eine Datei oder ein Terminal erfolgt.find
Antwort von @Andy Dalton ist eine bessere Lösung, da es nicht scheitern wird, egal wie viele Dateien aufgelistet werden sollen.Sie können find verwenden. Angenommen, Sie möchten nur reguläre Dateien, dann können Sie Folgendes tun:
Sie können den Typparameter entsprechend anpassen, wenn Sie andere Dateitypen möchten.
quelle
ls
. Dadurchfind
werden die Unterverzeichnisse rekursiv verarbeitet. Nicht rekursive müssen-maxdepth 1
vor dem-type
Argument hinzugefügt werden .Beachten Sie, dass in:
Die Shell berechnet die Liste der (nicht ausgeblendeten) Dateien im Verzeichnis und übergibt die Liste an
ls
.ls
druckt einfach diese Liste hier aus, also können Sie auch Folgendes tun:quelle
printf
hat den zusätzlichen Vorteil, dass Sie nicht die Fehlermeldung "Befehlszeile zu lang" erhalten, wenn Sie Tausende von Dateien haben, da dieseprintf
nicht als separater Prozess ausgeführt werden.printf
nicht wie eingebautpdksh
und einige seiner Ableitungen oder die meisten Versionen der Bourne-Shell. Ein Nachteil im Vergleich zuls -d
ist, dass, wenn sich keine nicht versteckte Datei darin befindet, sie gedruckt wird,/path/to/*
währendls
Sie einen Fehler über diese Datei erhalten, die stattdessen nicht existiert.Um nur normale Dateien zu sehen -
quelle
Sie können einfach
realpath
oderreadlink
:xargs
Erstellen und Ausführen von Befehlszeilen über die Standardeingabe.realpath
: gibt den kanonisierten absoluten Pfadnamen zurückreadlink
: Wert eines symbolischen Links lesenquelle
dpkg -S /usr/bin/realpath
. Schauen Sie sich das an .Ein anderer Weg , mit
tree
, die hier nicht erwähnt, geht es rekursiv und im Gegensatz zu finden oder ls Sie haben keine Fehler (wie:Permission denied
,Not a directory
) auch den absoluten Pfad für den Fall bekommen Sie die Dateien fütternxargs
oder anderen BefehlDie Optionen bedeuten:
So installieren Sie
tree
:sudo apt install tree
auf Ubuntu / Debiansudo yum install tree
auf CentOS / Fedorasudo zypper install tree
unter OpenSUSEquelle
sudo apt install tree
unter Ubuntusudo yum install tree
unter CentOSsudo zypper install tree
unter OpenSUSEbrew install tree
auf MacIn einer früheren Linux-Umgebung hatte ich einen
resolve
Befehl, der Pfade standardisierte, einschließlich der Umwandlung eines relativen Pfades in einen absoluten Pfad. Ich kann es jetzt nicht finden, also wurde es vielleicht von jemandem in dieser Organisation geschrieben.Sie können Ihr eigenes Skript mit Funktionen in den Python- oder Perl-Standardbibliotheken (und wahrscheinlich auch in anderen Sprachen) erstellen.
resolve.py
:resolve.pl
:Dann würden Sie Ihr Problem lösen mit:
Mit diesem Befehl können Sie auch Folgendes ausführen:
quelle