Unter Windows DOS kann ich mit diesem for
Befehl meine Produktivität enorm steigern und Millionen von Dingen gleichzeitig erledigen. Unter PowerShell ist es sogar noch besser. Unter Linux habe ich Schwierigkeiten.
Wie erstelle ich eine Reihe von Softlinks zu einigen Ordnern auf einem anderen Laufwerk?
Wenn Sie ln -s 2013-02-*
das tun, passiert etwas völlig Verrücktes und es werden Links in einem zufälligen Ordner erstellt.
Ich versuche also, Befehlssubstitution zu verwenden, aber beim echo
ersten Testen ist das Problem, dass
echo 'prepend/'`ls /drive/ -1`
Stellt nur die Zeichenfolge preprend/ dem ersten Eintrag voran. Dies sagt mir, dass die Befehlsersetzung zwar einmal mit einem remove-Befehl funktioniert hat, aber nicht so, wie ich dachte (es wird für jedes ls-Ergebnis ein einzelner Befehl erzeugt).
Ich brauche wieder eine For-Schleife. Wie mache ich "foreach $row in (ls -1) do (something)"?
Antwort1
Beginnen Sie in dem Ordner, in dem Sie Links haben möchten. So funktioniert es:
ln -s sourcefolder/2013-02-* .
Es gibt natürlich einen vollkommen sinnvollen „for“-Befehl:
for var in path/* ; do echo "prepend$var" ; done
Bearbeiten: Die allgemeine Möglichkeit, ein Programm zu verwenden, um einem anderen eine Liste von Argumenten bereitzustellen, sind Backticks: ``. Sie können also Folgendes tun:
for x in `ls -1` ; do program $x ; done
Allerdings verfügt ls über einige Zaubertricks, sodass Sie nicht -1 eingeben müssen, wenn Sie es als Eingabe für ein anderes Programm verwenden. Außerdem können Sie einfach eine Liste von Dateien mit einem *-Muster („Glob“) abrufen.