Wie kann ich eine Datei mit dem Namen ">" löschen?

22

Ich habe ein Python-Skript ausgeführt, das eine Fehlfunktion aufwies und sudozum Erstellen einer Datei mit dem Namen verwendet wurde >.

Wie kann ich diese Datei entfernen?

Wenn ich es versuche sudo rm >, erhalte ich natürlich den Fehler bash: syntax error near unexpected token 'newline', weil es den Anschein hat , als würde ich versuchen , die Ausgabe von umzuleiten rm.

Seine Berechtigungen sind -rw-r--r--.

Eine Person
quelle
10
Die Antworten sind natürlich richtig, aber im Allgemeinen könnten Sie folgendes überlegen: Wie wurde die Datei überhaupt erstellt? (Natürlich sudo touch >würde bei einer Shell derselbe Fehler auftreten.) Sie sagten, es handele sich um ein Python-Skript, das vermutlich durch Übergabe ">"an eine osFunktion erstellt wurde. Sollte also gut sudo python <<< 'import os; os.remove(">")'funktionieren.
wchargin
4
Dies erinnerte mich an den einen Fehler in Windows, bei dem Sie eine Datei mit einem bestimmten Namen buchstäblich nicht löschen konnten (aber es gab kein Problem damit.)
PyRulez
PyRulez ooh, welcher?
Austin Burk
8
Ironischerweise ist die Antwort in dem Titel, den Sie selbst geschrieben haben.
Raphael

Antworten:

54

All dies sollte funktionieren:

sudo rm \>
sudo rm '>'
sudo rm ">"
sudo find . -name '>' -delete
sudo find . -name '>' -exec rm {} +

Beachten Sie, dass die letzten beiden Befehle, diejenigen mit find, finden Sie alle Dateien oder Verzeichnisse mit dem Namen >im aktuellen Ordner und alle seine Unterordner. Um dies zu vermeiden, benutze GNU find:

sudo find . -maxdepth 1 -name '>' -delete
sudo find . -maxdepth 1 -name '>' -exec rm {} +
terdon
quelle
2
Es ist wahrscheinlich erwähnenswert, dass dies findnicht der Fall ist, rmda es rekursiv ist und jede Datei rmin Ihrem aktuellen Verzeichnisbaum löscht, egal wie tief sie ist.
jw013
6
@rahul Die ersten drei (die rmVarianten) sind alle gleich. Es gibt nur drei verschiedene Möglichkeiten, diesen Dateinamen vor der Shell zu schützen. Es gibt eigentlich keinen Grund, einen anderen vorzuziehen.
Derobert
7
Warum schlagen Sie vor find(1)? Das einzige Problem hierbei ist, dass ein Shell-Metazeichen in Anführungszeichen gesetzt werden muss. Es gibt eine Million verschiedener Programme, die eine Datei entfernen können, aber alles andere verwenden, als rm(1)nur die Antwort zu verschleiern.
camh
2
Sie brauchen GNU find nicht, um eine Wiederholung zu vermeiden. sudo find . ! -name . -prune -name '>' -exec rm {} +.
HDV
2
Ich bin mit @camh einverstanden und füge findnichts hinzu, um die gestellte Frage zu beantworten.
Paul Draper
18

Sie können es auch mit Python entfernen:

python -c 'import os;os.remove(">")'

Mit POSIX find:

find . ! -name . -prune -type f -name '>' -exec rm -f {} +
cuonglm
quelle
3
Warum die Mühe? Die Shell bietet zahlreiche Möglichkeiten, um eine Interpretation >als Ausgabeumleitung zu vermeiden .
Alexis
3
@alexis Imo ist es am besten, so viele Möglichkeiten wie möglich zu kennen, um diese einfachen Aufgaben zu erfüllen. Wenn op ein anderes Problem wie dieses hat, das nur mit der Shell zu lösen ist, haben sie ein anderes Tool in ihrer Toolbox, mit dem sie es ausprobieren können
undergroundmonorail
1

Was ich anfänglich gemacht habe, funktioniert auch:

sudo sh -c "rm \>"

Dies ist natürlich eine Variante des Einfacheren sudo rm \>.

Eine Person
quelle
0

Ich habe dies als Kommentar versucht, aber es kam alles in einer Zeile heraus

[Harry@localhost]~% touch ">"
[Harry@localhost]~% cat > ">"
line 1
line 2
[Harry@localhost]~% cat ">"
line 1
line 2
[Harry@localhost]~% ls -l ">"
-rw-r--r-- 1 Harry Harry 14 Jun  5 12:04 >
[Harry@localhost]~% rm ">"
[Harry@localhost]~% ls -l ">"
ls: cannot access >: No such file or directory
[Harry@localhost]~% 
Harry Weston
quelle
Dies ist jedoch bereits in Terdons Antwort enthalten ...
John WH Smith
Ja, es ist teilweise in der Antwort von Sehne angegeben, ich stimme zu, ich dachte nur, dass diese Sequenz einfach und explizit ist. Wie Sie sehen werden, habe ich versucht, es als Kommentar und nicht als Antwort einzufügen, aber ich weiß nicht, wie ich vermeiden kann, dass alles in einer Zeile steht. Es zeigt auch, dass Sie Python nicht benötigen, um die Datei zu erstellen, ein weiterer Punkt, der auch in anderen Kommentaren vorgeschlagen wird.
Harry Weston
0

Zitiere das Zeichen so, dass es von der Shell nicht als Umleitung interpretiert wird:

sudo rm '>'

Wenn Sie jedoch andere Dateien mit seltsamen Zeichen haben, ist es am sichersten, einen GUI-Datei-Explorer wie diesen zu öffnen nautilusund dort zu löschen.

Cyker
quelle