Ich habe eine Datei mit dem Namen erstellt \;:$"\'
, um eine meiner Software zu testen. Ich habe einen Fehler erhalten, weil ich die Dateieigenschaft nicht löschen kann. Ich versuche eine genaue Zeichenkombination zu finden, über rm
die ich sie entfernen kann , aber ich kann keinen Weg finden.
rm \\;:$\"\\\'
rm: cannot remove `\\': No such file or directory
rm "\\"\;:$\"\\\'
rm: cannot remove `\\;:$"\\\'': No such file or directory
rm '\;:$"\'''
rm: cannot remove `\\;:$"\\': No such file or directory
(Dieser letzte Versuch hat mich umgebracht)
Und viele, viele andere Versuche. Helfende Hand gebraucht!
rm -i ./*
, dass Sie auswählen müssen, ob jede Datei im Verzeichnis gelöscht werden soll oder nicht. Wenn Sie einen spezifischeren Glob eingeben können, tun Sie dies - in diesem Fall würde ich versuchen,rm -i ./*:*
da:
dies für die Shell in diesem Kontext nicht von Bedeutung ist.Antworten:
Wenn der Dateiname genau ist
\;:$"\'
, sollten Sie ihn entfernen können mit:Entfliehen Sie einfach alle Charaktere mit einem einzigen
\
.quelle
Sie können versuchen,
ls -li
in dem Verzeichnis, das die Datei enthält, die Datei mit dem durch die Ausgabe zurückgegebenen Inode zu löschenfind . -inum <inode-number> -exec rm -i {} \;
Ich
-i
habe den Befehl zum Suchen hinzugefügt , um ihn vor dem Löschen aufzufordern, falls der Befehl find eine andere Datei findet als erwartet.Zusätzlich zu dem Kommentar habe ich versucht, die Datei selbst zu erstellen und zu entfernen:
quelle
rm \\\;\:\$\"\\\'
funktioniert-i
können Sie nur die Datei auswählen, die Sie tatsächlich entfernen möchten.Sie können einfache Anführungszeichen verwenden und müssen sich dann nur noch um das Anführungszeichen selbst kümmern.
Bei der interaktiven Verwendung können Sie einfach die Tab-Vervollständigung verwenden, beginnend mit
'\
oder\\
. Tab-Vervollständigung aus'\
Erträgen'\;:$"\'\'''
, da bash einfach jedes eingebettete einfache Anführungszeichen durch ersetzt'\''
. Tab-Vervollständigung aus dem Nichts oder aus\\
Erträgen\\\;\:\$\"\\\'
.quelle
In Bash und ähnlichen Muscheln
\;:$"\'
Geben Sie dann einfach den Dateinamen wörtlich ein und drücken Sie die Eingabetaste. Derread
Befehl liest eine Zeile aus der Standardeingabe und speichert sie in der VariablenREPLY
. Das-r
Flag weist es an, die Zeile wörtlich zu lesen und Backslashes nicht als Escape-Sequenzen zu interpretieren. Zitiert$REPLY
stellt sicher , dass der InhaltREPLY
wird übergeben werdenrm
als ein einziges Argument so dass diese auch noch funktionieren , wenn der Dateiname Leerzeichen oder Tabulatoren enthält.(Hinweis: Wenn der Dateiname Zeilenumbruchzeichen enthält, können Sie anscheinend die
-d
Option verwendenread
, um das Abschlusszeichen für die Zeichenfolge zu ändern, die Sie eingeben möchten.)quelle
Wenn Sie nicht auf die Verwendung von Bash oder einer anderen Shell-Skriptumgebung beschränkt sind, können Sie eine solche Datei wahrscheinlich einfach entfernen, indem
unlink()
Sie entweder ein kurzes Programm schreiben, das einfach in Ihrer Lieblingssprache aufruft , oder einen Dateimanager wie Gnome Commander oder Midnight verwenden Commander zum manuellen Löschen der Datei. Mit der letzteren Option können Sie die betreffende Datei auswählen und löschen, ohne jemals irgendwo den Dateinamen eingeben zu müssen, wodurch die Möglichkeit ausgeschlossen wird, dass Metazeichen überhaupt eine besondere Bedeutung haben.quelle
Versuche dies,
"\" wird als Escape-Sequenz in Bash-Skripten verwendet, die eine litrale Bedeutung haben.
quelle
Ich finde es in solchen Fällen am einfachsten, höchstens ein paar Zeichen einzugeben / zu maskieren und dann bash den Befehl vervollständigen zu lassen mit
<TAB>
: bash stellt dann sicher, dass das für seine eigenen Zwecke geeignete Material zitiert wird.In diesem Fall, wenn ich es tue
Die Fertigstellung für wiederholte
<TAB>
anschließend geht anJetzt bin ich eigentlich etwas ratlos, wenn ich die Zwischenstufen erkläre, aber der endgültige Vorschlag ist sinnvoll.
Als Faustregel, wenn ich die Vervollständigung nicht verwende, neige ich dazu, alles zu zitieren, indem ich es in
'...'
Markierungen einfüge. Offensichtlich müssen Sie sich dann'
selbst schreiben , indem Sie'\''
die Anführungszeichen beenden, schreiben\;
, um eine einzelne'
Zeichenfolge zu erstellen, und eine andere Zeichenfolge in Anführungszeichen erneut eingeben. Das ist das Rezept, das ich für den Touch-Befehl verwendet habe, außer dass das endgültige Ergebnis weggelassen wurde,''
da es nichts hinzufügt.quelle
Eine weitere gute Lösung zu installieren oh-my-zsh ,
Typ rm und Reiter über auf die Datei , die Sie löschen möchten. ;)
quelle