ls-Befehl

oraclin25

Erfahrenes Mitglied
Hallo zusammen,

ich lerne gerade Shell-Skript-Programmierung(bash). Mein Problem:

Warum funktioniert das hier?

ls -l `find . -name "*.txt"`

ls -l
listet mir doch alle Dateien mit dazugerhörigen Rechten im entsprechenden Verzeichnis auf.

Die Kommando-Substitution `find . -name "*.txt"`
Das Ergebnis von der Kommando-Substituion ist doch aber eine Menge von Dateinamen, also kein Verzeichnis.

Ist dies etwas, was man einfach "lernen" muss?

Viele Grüße aus Rheinland,
Eure Ratna
 
Hi.

Deine Prämisse ist falsch. ls listet die Dateien (Verzeichnisse sind auch Dateien) auf die als Argumente übergeben werden. Falls keine Argumente angegeben sind, wird das aktuelle Arbeitsverzeichnis aufgelistet.

Gruß
 
Hallo deepthroat,

danke für Deine Antwort.

ls -l `find . -name "*.txt"`

hier listet ls alle Dateien aus dem aktuellen Verzeichnis. Soweit ist es schon mal. Es ist für mich unheimlich schwer zu akzeptieren, dass die Kommando-Substitution `find . -name "*.txt"` in diesem Fall als einer Art Nebenbedingung dient.
Es ist ja wie:
"liste mir alle Dateien, die sich im aktuellen Verzeichnis befinden, und zwar mit der Bedingung, dass die Dateien die Endung .txt besitzen"

Ich kenne Kommando-Subsitution nur als ein Objekt, das nach der Ausführung in einer Variablen abgespeicher wird. Wie zum Beispiel:
variablenname=`Kommando`

Aber als Nebenbedingung?

Ich meine, ich kann das hier als eine Art Ausnahme lernen, aber perfekt ist es dann nicht. Aber vielleicht rede ich ja Quatsch ist, das kann gut sein, bin nicht allzu lange in der Unix-Welt.

Schöne Grüße aus Rheinland,
Eure Ratna
 
Ich meine, ich kann das hier als eine Art Ausnahme lernen
Wieso Ausnahme?

Die Kommando-Substitution funktioniert doch immer gleich: bevor der eigentlich Befehl ausgeführt wird, wird an die Stelle der $() bzw. ``die Ausgabe des angegebenen Befehls ersetzt. Das hat nichts mit Bedingungen zu tun, sondern nur mit Ersetzung von Text / Wörtern.

Gruß
 
ach so okay.. danke vielmals. Ich hatte einen Denkfehler, ich dachte, ls nimmt lediglich ein Verzeichnis als Parameter. "Normale" Dateien nimmt ls auch. Danke.

dieses funktioniert nicht:

find . -name "*.txt" | ls -l

Also, soweit ich weiss:
Ich wollte eigentlich das Ergebnis von find als Standardeingabe für ls übergeben. Tut aber leider nicht.

Schöne Grüße aus Rheinland,
Eure Ratna
 
ach so okay.. danke vielmals. Ich hatte einen Denkfehler, ich dachte, ls nimmt lediglich ein Verzeichnis als Parameter. "Normale" Dateien nimmt ls auch. Danke.
ls nimmt alle Dateien. auch Verzeichnisse. :)
dieses funktioniert nicht:

find . -name "*.txt" | ls -l
Natürlich nicht. ls liest nichts von der Standardeingabe.

Dafür gibt es xargs:
Code:
find . -name "*.txt" -print0 | xargs -r0 ls -l
Gruß
 

Neue Beiträge

Zurück