excluir ou renomear um arquivo com \ r como o nome do arquivo

10

Eu tenho um pequeno arquivo irritante cujo nome parece ser um caractere único, e esse caractere é um \r

Como posso excluir isso?

É com isso que recebo ls -bl:

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

ls -l apenas exiba "?"

Colin
fonte
Como você acabou com um arquivo chamado assim?
mkaito

Respostas:

16

-Nos ls -lipara obter o número inode para o arquivo (primeira coluna), então use findpara excluí-lo (assumindo inode é 12345):

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

Garrett
fonte
Obrigado - isso é extremamente útil - eu senti que deveria haver algum tipo de referência inequívoca do sistema ao arquivo, mas não consegui encontrá-lo (de qualquer maneira rapidamente).
Colin
1
Dependendo da versão de findinstalado, você também pode fazerfind . -inum 12345 -delete
William Jackson
Para mim, quanto mais independente de versão, melhor. Mas boa sugestão, no entanto. :)
Garrett
5

Eu pessoalmente procuraria por Python:

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

Mas você também pode fazer isso a partir do shell se entender os caracteres de escape.

$ ls -b $'\r'
\r
$ rm -vi $'\r'
rm: remove regular empty file \r’? y
removed \r
Josh Lee
fonte
Eu acho que você também tem uma marreta na sua cozinha? Apenas no caso de você precisar quebrar uma noz? :-)
mivk 27/11/2015
3

Outra maneira rápida de remover um arquivo chamado <carriage return>se você estiver usando o shell Bash é:

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

Os nomes de arquivo com um caractere são incomuns e, se você não tiver outros arquivos no diretório, tente:

rm ?

Estou com preguiça de aprender ou procurar como citar caracteres estranhos, por isso usei variantes disso várias vezes quando estava preso a arquivos com nomes difíceis.

Thomas Padron-McCarthy
fonte
-1 Isso corresponde a todos os arquivos com um único nome de caractere - consulte "Expansão do nome do caminho" em man bash. Tentetouch a b c d $'\r'; rm ?
l0b0 15/05
1
@ l0b0: Sim? Como escrevi, os nomes de arquivo com um caractere são incomuns. É bastante provável que não haja outros arquivos no diretório e, nesse caso, isso funcione. Caso contrário, "rm -i?" pode ser usado.
Thomas Padron-McCarthy