Como deletar um arquivo do sistema de arquivos NTFS cujo nome contenha “:”?

5

Eu backup alguns dos meus arquivos do Linux em um disco rígido removível NTFS há vários dias, desta vez eu preciso remover esses arquivos. Mas eu acho difícil desde:

  1. No Windows, ele reclama que " não foi possível encontrar este item "

  2. Em uma máquina virtual cujo sistema operacional é o Ubuntu 12.04, quando eu montei o disco rígido (acho que ele está usando "ntfs-3g") e use " rm ", ele reclama " Nenhum arquivo ou diretório "; Mesmo " ls " falha no arquivo.

Então, há alguma maneira de destruir esse arquivo corretamente?

    
por Hongxu Chen 21.11.2013 / 09:59

6 respostas

5

Execute chkdsk /f no Windows. Ele deve remover arquivos com caracteres inválidos ou corrigir seus nomes de arquivos para que possam ser removidos manualmente.

    
por 21.11.2013 / 14:13
3

O NTFS suporta "fluxos", como os "forks" do HFS + e diferente de qualquer coisa nos sistemas de arquivos habituais do unix.

A convenção no Windows é nomear os streams como parte do nome do arquivo, separando o nome do arquivo do nome do fluxo com : , e é por isso que você estava obtendo "não foi possível encontrar este item" - para nome "aqui : tente isso ", o Windows estava à procura de fluxo" tente isso "no arquivo" aqui ". Eu entendo que você pode dizer ao Windows para não analisar nomes de arquivos como este, mas eu não sei como.

O ntfs-3g possui uma opção de montagem para ativar a análise compatível de nome de fluxo, montar o fs com -o streams_interface=windows e o ntfs-3g tratará : da mesma maneira em nomes de arquivos. Então, para verificar isso, mount|grep windows deve funcionar bem o suficiente.

    
por 22.11.2013 / 04:58
2

Se você já tentou executar o chkdsk do Windows em um sistema de arquivos ntfs-3g contendo dois-pontos mas que foi montado e usado no Linux sem a opção windows_names ou streams_interface=windows , a única maneira de restaurar a integridade do sistema de arquivos NTFS é para inicializar um sistema operacional Windows e permitir que o Windows chkdsk exclua permanentemente todos os arquivos que contenham dois pontos.

Dito de outro modo: seja muito, muito cuidadoso executando o Windows chkdsk em um sistema de arquivos NTFS que foi escrito para usar o ntfs-3g no Linux. Você perderá todos os arquivos que contiverem dois pontos.

Existem duas conseqüências do uso do ntfs-3g que interagem para causar isso:

  1. Tuxera adere à letra da especificação NTFS, que permite dois pontos em nomes de arquivos. No entanto, praticamente não há ninguém usando sistemas de arquivos que sejam exclusivamente NTFS não compatíveis com o Windows e nunca tenham sido usados com o Windows, portanto, quase todos realmente precisam do comportamento não padrão.

  2. A maneira segura do Tuxera para reparar um sistema de arquivos NTFS corrompido é inicializar um sistema operacional Windows e executar chkdsk . (Isso também acontecerá automaticamente se você inicializar um sistema operacional Windows e o sistema de arquivos for detectado como precisando de reparo.)

Portanto, se você estiver interessado em estabilidade e segurança a longo prazo do seu sistema de arquivos, você precisará inicializar um sistema operacional Windows e executar chkdsk para repará-lo. Mas quando o Windows chkdsk for executado, ele excluirá todos os arquivos com dois-pontos em seus nomes de arquivos sem nenhum prompt ou aviso.

Infelizmente, muitas pessoas usam o NTFS como um sistema de arquivos universal para portabilidade e backups. Dois arquivos comuns contendo nomes de arquivos no Linux são os e-mails nomeados após sua linha de assunto (Re :, Fwd :, etc.) e os e-mails armazenados usando o formato Maildir. Portanto, se você estiver criando um sistema de arquivos ntfs-3g do zero para essa finalidade, certifique-se de sempre montá-lo usando a opção windows_names mount e em /etc/fstab . Quando você tiver que executar chkdsk , todos os arquivos criados no sistema de arquivos devem ser válidos.

Se você não fizer isso, talvez não seja possível remover ou salvar a maioria ou todos os seus arquivos inválidos do Windows (aqueles que contenham dois pontos, etc.). Depois de criar arquivos inválidos, o Windows considerará o sistema de arquivos corrompido até que esses arquivos sejam eliminados - e somente o Windows poderá reparar o sistema de arquivos. Portanto, reparar ou excluir os arquivos do Linux será impossível.

    
por 09.05.2014 / 17:09
0

tente rm ./: ou rm ./":" ou rm ./\: nesta ordem:)

    
por 21.11.2013 / 10:04
0

Não entendo por que isso está causando seus problemas. Os testes a seguir foram executados em um sistema de arquivos NTFS:

 $ mount| grep win
/dev/sda3 on /winblows type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,allow_other,blksize=4096)
$ grep winb /etc/fstab
UUID=C0BCD19CBCD18D72   /winblows   ntfs    defaults    0   0
$ pwd
/winblows/foo

Então, estou em uma partição NTFS e executo:

$ touch :a a: a:b
$ ls
:a  a:  a:b
$ rm :a a: a:b

Todos esses comandos funcionam, de qualquer forma, possíveis soluções alternativas são:

rm \:a
rm -- :a
rm ':a'
rm *:*
find . -name "*:*" -delete
    
por 21.11.2013 / 18:01
-1

Tente arquivar com o winrar - selecione "excluir arquivos após o arquivamento" nas opções de arquivamento. Isso deve mover seus arquivos para o arquivo rar e excluir os arquivos originais. Em seguida, exclua o arquivo rar.

    
por 22.11.2013 / 02:18