Derzeit enthält das Verzeichnis, das automatisch für ein Programm erstellt wird, mit dem ich arbeite, Doppelpunkte ( :
), die Probleme verursachen, wenn ich versuche, das Verzeichnis zu bearbeiten . Könnte mir jemand helfen, zuerst diesen Doppelpunkt zu entfernen und dann cd
in das umbenannte Verzeichnis zu gelangen? (Also müsste ich wohl den neuen Verzeichnisnamen einer Variablen gleichsetzen?)
Beispiel:
- aktueller Verzeichnisname:
Lang-32b-Branch:Line
- gewünschter Verzeichnisname:
Lang-32b-BranchLine
Antworten:
Um dies manuell zu erreichen, können Sie auf einfache Weise den
mv
Befehl mit einem starken Anführungszeichen verwenden, um sicherzustellen, dass die Shell den Doppelpunkt nicht als Sonderzeichen interpretiert:Ein alternativer Ansatz besteht darin, eine Variable und eine der Funktionen der Bash-Parametererweiterung zu verwenden. Dies kann nützlicher sein, wenn Sie diese Änderung des Verzeichnisnamens in ein Skript automatisieren möchten:
Die Erweiterung von
"${dir//:/}"
ersetzt jedes Auftreten des Doppelpunktzeichens durch nichts und ergibt das erwartete Ergebnis von Lang-32b-BranchLine. Die Verwendung"${dir/:/}"
würde dazu führen, dass nur das erste Auftreten des Doppelpunkts entfernt wird, obwohl dies für Ihr Beispiel immer noch funktioniert.Als Einzeiler zum Verschieben und CD in das Verzeichnis:
Oder wenn Sie den geänderten Verzeichnisnamen in einer Variablen namens new_dir erfassen möchten:
Eine großartige Anleitung zur Erweiterung der Bash-Parameter finden Sie hier .
quelle
$_
enthält immer das letzte Argument des zuletzt aufgerufenen Befehls (siehe meine Antwort unten) - das kann viel Tipparbeit sparen! Die Tastenkombination für die sofortige Eingabe lautetAlt+.
.${dir//:/}
kann weiter verkürzt werden auf${dir//:}
.Alt+.
auf Cli, aber nie wirklich$_
. Danke für die zusätzlichen Tipps!:
als Sonderzeichen (außerhalb der Erweiterung der Geschichte und als Operator, was hier irrelevant ist)?$PATH
... (Ich sage nicht, dass es im Fall des OP relevant ist, sondern dass es eine Möglichkeit ist - eine, die mir sofort in den Sinn kam, aber keine Ich habe auch viel darüber nachgedacht.)Wenn Sie möchten, dass ein allgemeiner Befehl mehrere Dateien und / oder Verzeichnisse mit einem oder mehreren Doppelpunkten umbenennt, können Sie Folgendes verwenden
rename
:Danach können
cd
Sie wie gewohnt (ohne Anführungszeichen) in eines der von Ihnen geänderten Verzeichnisse wechseln.Alternative Befehlszeile gemäß den Tipps in den Kommentaren von @DavidFoerster und @dessert,
Bearbeiten:
@EliahKagan schlägt vor, mit der Option -n, "trocken" zu beginnen.
quelle
rename
empfehle ich, es-n
zuerst mitrename -n 's/://g' *
auszuführen (zum Beispiel :) , wodurch nur ausgedruckt wird, welche Umbenennungsvorgänge ausgeführt werden würden. Dann kann es erneut ausgeführt werden, wobei die-n
Option entfernt wird, um die Dateien tatsächlich umzubenennen. Dies hilft, Fehler wie das versehentliche Umbenennen einer Reihe von Dateien zu vermeiden, die man eigentlich in Ruhe lassen wollte.Wenn es nur das eine Verzeichnis ist, das Sie verwenden können
mv
undcd
. So nutzen Sie die Möglichkeiten derbash
Verlaufserweiterung und den speziellen Parameter$_
:!#:$:s/:/
ist mit dem letzten Wort (ersetzt$
) des aktuellen Befehlszeile (!#
), in dem die ersten:
wirds
durch nichts ubstituted. Wenn Sie möchten, dass jeder Doppelpunkt entfernt wird, ändern Sie ihn in ( lobal). wird einfach durch das letzte Argument des letzten Befehls ersetzt.!#:$:gs/:/
g
$_
quelle