Exclua um arquivo corrompido no Linux

Exclua um arquivo corrompido no Linux

Como posso excluir este arquivo? Acho que é um arquivo corrompido em um sistema de arquivos VFAT.

?????????  ? ?       ?        ?            ? 100.jpg

Responder1

Uma possibilidade é descobrir o inodenúmero do arquivo, o que você pode fazer executando ls -i. Isso retornará duas colunas – a primeira sendo o inode e a segunda sendo o nome do arquivo. Você pode então usar o findcomando para selecionar apenas o arquivo com aquele inode específico e excluí-lo.

sh-4.1$ ls -i .
  17921 somefile.ods
    169 someotherfile.conf
    305 -????????? ? ? ? ? ? 100.jpg
  18048 yetanotherfile.jpg

sh-4.1$ find . -maxdepth 1 -inum 305 -ok rm '{}' \;
< rm ... -????????? ? ? ? ? ? 100.jpg > ? y

Como o inode provavelmente é exclusivo do arquivo (assumindo que não há hardlinks), isso permitirá a exclusão sem os riscos inerentes aos curingas. As opções maxdepthe okdo comando find apenas tornam ainda menos provável que você acesse o arquivo errado por acidente.

Responder2

Não tenho certeza se alguma das respostas aqui realmente teve o problema relatado por Stig. Acabei de me deparar com esse problema no meu sistema de arquivos ext4:

# ls -l /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
total 0
?????????? ? ? ? ?            ? easy-rsa-master

# ls -i /tmp/dependencies/
ls: cannot access /tmp/dependencies/easy-rsa-master: No such file or directory
? easy-rsa-master

# rm -r /tmp/dependencies
rm: descend into directory ‘dependencies’? y
rm: cannot remove ‘/tmp/dependencies/easy-rsa-master’: No such file or directory
rm: remove directory ‘dependencies’? y
rm: cannot remove ‘dependencies’: Directory not empty

O arquivo em si estava corrompido junto com seus atributos de arquivo. ls -i não mostra claramente nenhum ID de inode. Nenhum uso de rm resolverá o problema. Até rm -rf entra no diretório e tenta excluir o arquivo diretamente (e silenciosamente).

Minha solução foi recriar o diretório sem o arquivo incorreto. Então você pode mover o diretório para outro local, como/tmp. Ele desaparecerá após uma reinicialização ou sempre que sua distribuição limpar o diretório /tmp (espero).

Responder3

Eu recomendaria uma versão um pouco mais defensiva da sugestão de cHao:

rm -i ./*100.jpg*

Os -ifabricantes rmperguntam se você deseja ou não excluir cada arquivo que corresponda ao curinga; isso garante que você também não excluirá acidentalmente outros arquivos. E o líder ./garante que todos os nomes de arquivos serão tratados comonomes de arquivose não outras opções rm(parece que você pode ter um traço inicial, é por isso que isso é importante).

É possível, aliás, que existam personagens invisíveisdentroa string "100.jpg". Se a mensagem acima fornecer uma mensagem de erro como " rm: ./*100.jpg*: not found", é por isso. ls -1fw | cat -vpode ser útil.

Responder4

Você pode tentar

rm *100.jpg*

Os ?'s são pontos de interrogação literais ou caracteres que não fazem sentido. De qualquer forma, o próprio sistema operacional (e o shell) geralmente pode remover o arquivo, se o sistema de arquivos não estiver conectado.

Se o sistema de arquivosébagunçado, porém, excluir coisas pode piorar a situação. Eu recomendo que você inicialize no Windows para verificar a unidade e exclua o arquivo, se puder.

informação relacionada