TL; DR: Execute ls -1b
, localize o nome do arquivo, copie a linha na qual ele aparece e dê isso para rm
.
Como outros sugeriram, muito provavelmente isso se deve a limitações na maneira como ls
- e alguns outros programas, incluindo software cliente e servidor - manipulam nomes de arquivos estranhos, como os que contêm caracteres de controle, por padrão. O seu sucesso com a resposta do JdeBP sugere strongmente que este era o caso, embora fosse uma boa aposta antes mesmo disso.
-
Para ls
, quando saída padrão é um terminal, ?
caracteres são impresso em seu lugar. Portanto, se você não estiver enviando a saída de ls
para qualquer outro comando (ou redirecionando-o para um log para visualização), provavelmente seu nome de arquivo não contém caracteres de controle. Mas há outros caracteres problemáticos - talvez o nome do arquivo contenha espaços em branco à direita, por exemplo.
Esse comportamento de ls
pode ser confuso, mas não é um bug, pode ser substituído explicitamente pelo usuário (veja abaixo).
-
Ao tentar acessar ou remover um arquivo remotamente, erros no software do servidor ou podem produzir tais problemas.
Experimentei esse tipo de coisa via ftp
várias vezes , inclusive para arquivos cujos nomes continham espaços à direita. (Isso não funcionou devido a um bug no meu cliente ftp.) Mesmo quando você cria manualmente um arquivo, dependendo de como você o está criando, às vezes é muito fácil inserir inadvertidamente um espaço à direita, ou outro espaço em branco que pode parecer com espaços mesmo que não seja.
Esta é uma situação em que ls -1b
(ou dir -1
) é útil:
-
-1
informa ls
para mostrar uma entrada por linha. Dessa forma, não há confusão sobre onde um nome de arquivo termina e outro começa. Isso é útil para arquivos com nomes estranhos.
-
-b
informa ls
para imprimir seqüências de escape para quaisquer caracteres especiais. A saída de ls -b
pode ser copiada e colada literalmente em um comando, sem adição de citações : todos os caracteres problemáticos já foram citados de uma maneira que faz com que o shell os reconheça como eles são. / li>
Há apenas uma ressalva: se o último caractere em uma linha parecer ser \
, copie um caractere depois disso, pois isso significa que \
está citando um espaço.
Você pode executar ls -1b
desse modo ou pode passar um padrão glob de shell a ele (por exemplo, ls -1b qyx*
). A globulação pode ou não encontrar o arquivo, dependendo se os caracteres de controle (ou outros caracteres estranhos) estão presentes na parte do nome que aparece no padrão glob.
Tendo copiado a versão \
-quoted do nome de arquivo dado a você por ls
, você pode colá-lo em um comando. Você não precisa modificá-lo manualmente de qualquer maneira. No seu caso, como você deseja excluir o arquivo, digite rm
, digite um espaço, cole a linha e pressione Enter .
Outras leituras:
-
10.1
ls
: Listar o conteúdo do diretório no Manual de referência do Gutu Coreutils .
-
minha resposta para essa pergunta , que é muito diferente da sua pergunta, mas toca muito em questões de como
ls
(e dir
) exibe nomes de arquivos estranhos.