Weisen Sie den Dateinamen eine variable in der shell
Ich versuche, ein Skript schreiben, das tut etwas ein wenig anspruchsvoller als das, was ich Ihnen gleich zeigen werde, aber ich weiß, dass das problem in diesem Teil.
Möchte ich jedem Namen eine Liste von Dateien in einem Verzeichnis auf einer Variablen zugewiesen werden (die gleiche variable, ein zu einer Zeit) durch eine for
Schleife, dann tun Sie etwas innerhalb der Schleife mit diesem, zu sehen, was bedeutet:
for thing in $(ls $1);
do
file $thing;
done
Edit: sagen wir, dieser scrypt heißt Scrypt und ich habe einen Ordner namens " Ordner, und es hat 3 Dateien drinnen mit den Namen A,B,C. ich will es mir zeigen, auf dem terminal, wenn ich dies Schreibe:
./scrypt Folder
folgende:
A: file
B: file
C: file
Mit dem code habe ich oben gezeigt, bekomme ich diese:
A: ERROR: cannot open `A' (No such file or directory)
B: ERROR: cannot open `B' (No such file or directory)
C: ERROR: cannot open `C' (No such file or directory)
dass ist das problem
Ja, das einzige was hier falsch ist, brechen Sie auf Leerzeichen.
nun, es sagt tun Sie dies für jede Datei: ERROR: cannot open `file'(no such file or directory)
InformationsquelleAutor Zasito | 2012-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit ist die Verwendung von wildcard-expansion statt
ls
z.B.,Dies setzt Voraus, dass
$1
ist der Pfad zu einem Verzeichnis mit Dateien darin.Wenn Sie möchten, sich nur auf normale Dateien, fügen Sie einen Scheck direkt nach
do
entlang der Linien von:$1
ist ein Ordner.das würde assing den Namen des Verzeichnisses, mit dem Namen, ich brauche den Namen der Dateien innerhalb des Verzeichnis an mit dem Namen.
Nein, diese weisen wiederum den gesamten Pfad zu den Dateien in diesem Verzeichnis. Wenn Sie nur den Dateinamen, den Sie verwenden können
basename "$filename"
extrahiert nur den Dateinamen ohne den Pfad.(Versuchen Sie es mit
echo
als Befehl zu sehen.)Wenn ich diese ersetzen auf das, was ich schrieb auf die Frage, Sie wird mir zeigen, auf dem terminal: $1: Verzeichnis. Lassen Sie uns sagen, dass wir Ordner wie das Argument, es hat innen 3 Dateien A, B, C. Wenn ich Schreibe ./scrypt Ordner möchte ich es zeigen:Datei B:die Datei C:die Datei, wenn ich diese, es zeigt nur die Ordner: directory.
InformationsquelleAutor Arkku
http://mywiki.wooledge.org/ParsingLs
Platzhalter verwenden anstelle:
Beachten Sie die Anführungszeichen um $filename
InformationsquelleAutor Master Chief
Es ist ein bisschen unklar, was Sie versuchen zu erreichen, aber Sie können im wesentlichen das gleiche tun mit den Funktionen, die bereits vorhanden mit
find
. Zum Beispiel, die folgenden druckt den Inhalt jeder gefundenen Datei in einem Ordner:InformationsquelleAutor sampson-chen
gut,
ich denke, dass das, was du meintest ist, dass die Schleife zeigt die Dateinamen in das gewünschte Verzeichnis.
also, ich würde es tun, wie:
so sollte das Ergebnis (im Fall, in dem dir sind 3 Dateien und die Namen sind A, B, C:
InformationsquelleAutor ofir.elhayani