Como deletar um nome de arquivo ":?"

Como deletar um nome de arquivo ":?"

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_fileem vez de $filewith rm $fileou 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, rmse for encontrado no início de um argumento, será tratado como uma opção. Aqui --diz rmque 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 -iopçã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.

informação relacionada