supprimer ou renommer un fichier avec \ r comme nom de fichier

10

J'ai un petit fichier embêtant dont le nom semble être un seul caractère, et ce caractère est un \r

Comment puis-je supprimer cela?

C'est ce que je reçois avec ls -bl:

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

ls -l affichez-le simplement "?"

Colin
la source
Comment vous êtes-vous retrouvé avec un fichier nommé comme ça?
mkaito

Réponses:

16

Nous ls -lipour obtenir le numéro d'inode du fichier (première colonne), puis utiliser findpour le supprimer (en supposant que l'inode est 12345):

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

Garrett
la source
Merci - c'est extrêmement utile - je sentais qu'il devait y avoir une sorte de référence système sans équivoque au fichier mais je ne pouvais pas le trouver (rapidement de toute façon).
Colin
1
Selon la version findinstallée, vous pouvez également le fairefind . -inum 12345 -delete
William Jackson
Pour moi, plus la version est indépendante de la version, mieux c'est. Mais bonne suggestion néanmoins. :)
Garrett
5

J'atteindrais personnellement Python:

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

Mais vous pouvez également le faire à partir du shell si vous comprenez les caractères d'échappement.

$ ls -b $'\r'
\r
$ rm -vi $'\r'
rm: remove regular empty file \r’? y
removed \r
Josh Lee
la source
Je suppose que vous avez également un marteau dans votre cuisine? Juste au cas où vous auriez besoin de casser une noix? :-)
mivk
3

Un autre moyen rapide de supprimer un fichier appelé <carriage return>si vous utilisez le shell Bash est:

$ rm <control-v><control-m>
S2VpdGgA
la source
2

Les noms de fichiers à un caractère sont inhabituels, et si vous n'avez aucun autre fichier de ce type dans votre répertoire, vous pouvez essayer ceci:

rm ?

Je suis trop paresseux pour apprendre ou chercher comment citer des caractères étranges, j'ai donc utilisé des variantes de cela à plusieurs reprises lorsque j'étais coincé avec des fichiers avec des noms difficiles.

Thomas Padron-McCarthy
la source
-1 Ceci correspond à tous les fichiers avec un nom de caractère unique - Voir "Expansion de nom de chemin" dans man bash. Essayeztouch a b c d $'\r'; rm ?
l0b0
1
@ l0b0: Oui? Comme je l'ai écrit, les noms de fichiers à un caractère sont inhabituels. Il est assez probable qu'il n'y ait pas d'autres fichiers de ce type dans le répertoire, et dans ce cas, cela fonctionne. Sinon "rm -i?" peut être utilisé.
Thomas Padron-McCarthy