• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

ls -r1 mit absoluten Pfaden

norritt

Member
Hallo zusammen,

ich benötige für ein kleines Kommandozeilenscript eine Liste von Dateien die ich via xargs als Argument übergebe. Allerdings benötige ich zu diesem Zweck absolute Pfade zu den Dateien, die mir "ls" nicht liefert. Gibts eine Möglichkeit "ls" dazu zu bewegen, komplette Pfadnamen statt nur Dateinamen auszugeben?
 

leanUX

Member
Wie wäre es mit
Code:
find  $(pwd) -maxdepth 1 | sort --reverse | head --lines=-1

Ich denke das sollte dem
Code:
ls -r1
entsprechen, aber eben wie gewüscht mit absoluten Pfaden.
 

josef-wien

Ultimate Guru
Was hältst Du von
Code:
find $PWD -maxdepth 1 | sort -r
oder
Code:
find -L $PWD -maxdepth 1 -type f | sort -r
(wenn Du nur die Dateien, aber keine Verzeichnisse brauchst)?
 

uhelp

Member
Vom Gebrauch von "xargs" würde ich dringend abraten.
Das ist nicht nur unzuverlässig, es ist, war und wird auch immer buggy sein.

find kann das ganz alleine.
Füge einfach deinem "find" Befehl am Ende das hier an:
Code:
-print0  -exec /Pfad/zum/Script  {} \;
Mit "-exec" führt "find" dann dein Script aus.
Die geschweiften Klammern bezeichnen jeweils eine gefundene Datei.
Und der Strichpunkt, der gequotet sein muss, damit er nicht von der ausführenden Bash geschluckt wird, schließt für "find" das Kommando ab. Das ist syntaktisch zwingend.

Das ist in jedem Falle zuverlässiger und portabler.

Zudem kann man bei "find" auch noch mit "\0" (Slash Null) arbeiten.
Das bewirkt in meinem Code das erste Argument "-print0"
Damit werden die Dateinamen mit der binären Null voneinander getrennt, was bewirkt,
dass du dich um Leer- und Sonderzeichen in Dateinamen nicht mehr kümmern musst.
(Unter Linux ist JEDES Zeichen, außer "\0" und "/" im Dateinamen erlaubt.)

Damit wird das Ganze sehr viel robuster und portabler.

Und NEIN: Der Vorteil, dass "xargs" versucht so viele Dateien, wie die Argumentzeile es zulässt, zu übergeben, zählt hier nicht.
find macht das auch.
 
Oben