Ich habe ein kleines Problem. Ein Client beauftragte mich mit der Migration von Websites von einem wirklich alten Server. Ich weiß nicht, wie sie dorthin gekommen sind, aber es gibt Dateien mit '
ihren Namen. Gibt es eine Möglichkeit, die Datei umzubenennen? mv
scheint den Trick nicht zu tun.
ls
zeigt es als 90843_O\\'ConnorPaul_GeneralManager.jpg
Wenn ich es versuche
mv 90843_O\\'ConnorPaul_GeneralManager.jpg 90843_O_ConnorPaul_GeneralManager.jpg
es macht nichts mit dem >
in der neuen Zeile, als würde es auf weitere Eingaben warten.
Wenn ich es versuche
mv 90843_O\'ConnorPaul_GeneralManager.jpg 90843_O_ConnorPaul_GeneralManager.jpg
Ich bekomme den Fehler
mv: kann nicht '90843_O \' ConnorPaul_GeneralManager.jpg 'angeben: Keine solche Datei oder kein solches Verzeichnis
Gibt es auch eine einfache Möglichkeit \'
, _
in allen Dateien in einem bestimmten Ordner zu wechseln ?
vidir
ist dies eine einfache Lösung für diese Art von Problemen.Antworten:
Die Vervollständigung der Bash-Tabs sollte hier das Richtige tun können, wenn Sie nur die
mv 90843_O
Tabulatortaste eingeben und drücken. Andernfalls können Sie dem Namen ordnungsgemäß entkommen:Die doppelten Anführungszeichen machen das Escapezeichen überflüssig
'
, aber die beiden Backslash-Zeichen müssen noch maskiert werden (ein zusätzlicher Backslash für jedes Zeichen führt zu vier Backslashes). Eine weitere Option ist:Wenn Sie die Backslashes in einfache Anführungszeichen setzen, müssen Sie sie nicht mehr umgehen, aber Sie müssen die einfachen Anführungszeichen beenden, um ein Literal hinzuzufügen
'
. Dies wird nach dem Ende der Anführungszeichen maskiert.Beachten Sie, dass das Problem hier genauso viel mit Backslashes im Namen zu tun hat wie mit dem einfachen Anführungszeichen. So ersetzen Sie die
\\'
Sequenz (da der Dateiname in der Frage zwei Backslashes enthält, verursachen beide Probleme) durch einen Unterstrich für alle Dateien in einem Verzeichnis mithilfe einer Schleife:Das
-i
wird Siemv
auffordern, wenn Dateien überschrieben werden. Verwendenprename
(rename
Links dazu auf vielen Systemen):Entfernen Sie das,
-n
wenn Sie glücklich sind, dass es tut, was Sie wollen. Beachten Sie, dass die Backslash-Zeichen hier innerhalb des Perl-Ausdrucks maskiert werden sollten, obwohl sie einfache Anführungszeichen enthalten (ohne die einfachen Anführungszeichen würden Sie acht Backslashes benötigen, da vier von der Shell entfernt würden und nicht Teil des Perl-Ausdrucks wären).quelle
Sie können
rename
für solche Aufgaben verwenden:Wenn Sie ersetzen möchten
'
für_
Sie auch Umbenennungs verwenden können:quelle
Grrr, @Graeme hat mich geschlagen, aber ich werde trotzdem posten ...
Wenn Sie den Dateinamen in doppelte Anführungszeichen setzen,
mv -v "90843_O'ConnorPaul_GeneralManager.jpg" 90843_O_ConnorPaul_GeneralManager.jpg
reicht dies aus. Die Verwendung-v
ist optional, zeigt jedoch an, was sie getan hat. Ich glaube, es gibt noch einen zweiten Weg, außer allen Zeichen zu entkommen, wenn das überhaupt möglich ist. Der einzige Nachteil, den ich auf diese Weise kenne, ist, dass die Shell den Text verarbeitet, da er sich nicht in einfachen Anführungszeichen befindet, ihn aber überhaupt nicht manipuliert, da es sich nicht um internen Code handelt und die zusätzliche Zeit für die Verarbeitung bedeutungslos ist.Gerade getestet, können Sie Zeichen wie
>
in einem Text in doppelten Anführungszeichen haben und es wird als Teil des Dateinamens genommen.Als Tipp für die Zukunft, können Sie
./
direkt vor dem Dateinamen , wenn es Probleme gibt, wie Dateien mit einem Bindestrich beginnen:mv ./-file file
benennt-file
anfile
. In diesem Fall können Sie den Dateinamen ausnahmsweise nicht zitieren oder entkommen.Seltsamerweise könnte ich die Datei erstellen,
90843_O'ConnorPaul_GeneralManager.jpg
wenn ich dem einfachen Anführungszeichen von entkommen\'
würde, aber es würde sie nicht erstellen, wenn sie nicht doppelt oder in Anführungszeichen gesetzt wäre.PS: Die Bash-Vervollständigung ist eine andere Möglichkeit. Sie hat das Problem mit dem Dateinamen Ihrer Datei umgangen, funktioniert jedoch nicht mit "Bindestrich" -Dateien / -Ordnern. Schreiben Sie einfach einen Teil des Namens und drücken Sie die Tabulatortaste. Den Rest erledigt sie.
quelle