
Eu crio um nome de arquivo :~
no shell bash por acidente
scp foo :~
Como excluí-lo?
Responder1
tente rm ':?'
ou rm ":?"
ourm :\?
principalmente, você precisa citar o nome do arquivo com aspas simples ou duplas. Ou escape de quaisquer caracteres especiais contidos no nome do arquivo.
alguns caracteres especiais que posso contar são:
*
|
$
&
#
<>
;
space/tab/newline
\
brackets/parenthesis/braces
'"`
?
etc
Sugiro usar aspas simples para evitar a exclusão de um arquivo errado com nome my_file
em vez de $file
with rm $file
ou rm "$file"
when file='my_file'
. O caractere de aspas simples é o único caractere que você não pode citar com aspas simples em shells do tipo Bourne, mas você sempre pode citar o restante do nome do arquivo com '...'
e '
ele mesmo como \'
:
rm -- '-$#~<>'\''"*?[]{}'`
Observe que isso -
não é especial para o shell, mas é especial porque, rm
se for encontrado no início de um argumento, será tratado como uma opção. Aqui --
diz rm
que os argumentos a seguir não devem ser tratados como opções, mesmo que comecem com a -
.
Responder2
Em geral, sempre que você quiser remover um arquivo com nome estranho, você pode tentar usar o marcador --
que indica o fim das opções. Qualquer coisa após esse sinalizador é tratada como um parâmetro posicional. (Veja também:O que significa "--" (traço duplo)?)
Então, isso seria
rm -i -- :?
(Conforme sugerido por @Doug O'Neal, a -i
opção avisa antes da exclusão para garantir que você esteja removendo o arquivo correto.)
Porém, neste caso ?
será expandido pelo shell como um caractere glob. Portanto, o acima não funcionará.
Nesse caso, você pode usar o recurso de preenchimento automático do shell. Vá para o diretório onde está o arquivo com nome estranho, digite rm :
(sem pressionar Enter) e pressione Tabpara percorrer todos os arquivos no diretório atual. O arquivo com nome estranho aparecerá devidamente citado.