Löschen oder benennen Sie eine Datei mit \ r als Dateinamen um

10

Ich habe eine lästige kleine Datei, deren Name ein einzelnes Zeichen zu sein scheint, und dieses Zeichen ist ein \r

Wie kann ich das löschen?

Das bekomme ich mit ls -bl:

-rw-rwxr--+   1 root             snapplewriters        0 Aug 29  2011 \r

ls -l zeige es einfach an "?"

Colin
quelle
Wie sind Sie überhaupt zu einer solchen Datei gekommen?
Mkaito

Antworten:

16

Ihnen ls -lidie Inode - Nummer für die Datei zu erhalten (erste Spalte), dann verwenden Sie findes zu löschen (vorausgesetzt Inode ist 12345):

find . -inum 12345 -exec rm -i {} \;

Garrett
quelle
Vielen Dank - das ist äußerst hilfreich - ich hatte das Gefühl, dass es eine eindeutige Systemreferenz für die Datei geben muss, konnte sie aber nicht finden (sowieso schnell).
Colin
1
Abhängig von der findinstallierten Version können Sie auchfind . -inum 12345 -delete
William Jackson
Für mich ist es umso besser, je mehr versionunabhängig es ist. Trotzdem ein guter Vorschlag. :)
Garrett
5

Ich würde persönlich nach Python greifen:

>>> import os
>>> '\r' in os.listdir('.')
True
>>> os.unlink('\r')

Sie können dies aber auch über die Shell tun, wenn Sie Escape-Zeichen verstehen.

$ ls -b $'\r'
\r
$ rm -vi $'\r'
rm: remove regular empty file \r’? y
removed \r
Josh Lee
quelle
Ich denke du hast auch einen Vorschlaghammer in deiner Küche? Nur für den Fall, dass Sie eine Nuss knacken müssen? :-)
Mivk
3

Eine weitere schnelle Möglichkeit, eine aufgerufene Datei zu entfernen, <carriage return>wenn Sie die Bash-Shell verwenden, ist:

$ rm <control-v><control-m>
S2VpdGgA
quelle
2

Einstellige Dateinamen sind ungewöhnlich. Wenn Sie keine anderen derartigen Dateien in Ihrem Verzeichnis haben, können Sie Folgendes versuchen:

rm ?

Ich bin zu faul, um zu lernen oder nachzuschlagen, wie man seltsame Zeichen zitiert, deshalb habe ich einige Male Varianten davon verwendet, als ich mit Dateien mit schwierigen Namen feststeckte.

Thomas Padron-McCarthy
quelle
-1 Dies entspricht allen Dateien mit einem einzelnen Zeichennamen - Siehe "Pfadnamenerweiterung" in man bash. Versuchen Sietouch a b c d $'\r'; rm ?
l0b0
1
@ l0b0: Ja? Wie ich schrieb, sind einstellige Dateinamen ungewöhnlich. Es ist ziemlich wahrscheinlich, dass sich keine anderen solchen Dateien im Verzeichnis befinden, und in diesem Fall funktioniert dies. Sonst "rm -i?" kann verwendet werden.
Thomas Padron-McCarthy