Questão Não é possível excluir diretórios vazios com nomes estranhos


Eu estou passando por um momento difícil tentando excluir três diretórios vazios que foram criados após um processo abortado de "limpar o espaço livre em disco" do bleachbit, eu usei todos os métodos sugeridos e nenhum parece funcionar, eu tentei destruí-los com bleachbit e excluir usando comandos como rm -d, rm -f, rm -r, Eu tentei renomeá-los, movê-los, eu até substituí o Ubuntu 16.04 com o 17.04 na chance de que o que está errado será corrigido, mas eles ainda estão lá.

Os diretórios estão em uma partição separada e não no diretório inicial. Seus nomes são os seguintes:

  1. -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
  2. CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC
  3. qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9

Sempre que tento alguma coisa, recebo esta mensagem que diz:

Não existe tal arquivo ou diretório

Aqui estão algumas das saídas:

me@MyPC:~$ rm -f /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

me@MyPC:~$ rmdir -- $ 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove '$': No such file or directory
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir -- 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC'
rmdir: failed to remove 'CD09GzmqmJfZ2rBA5rtBsWR1EAewq-fZWJCJhlO6r1aC': No such file or directory

me@MyPC:~$ rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
rmdir: failed to remove '-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': No such file or directory

me@MyPC:~$ sudo rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR
rmdir: failed to remove '-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': No such file or directory



me@MyPC:/media/me/702E29F142F2362F$ rmdir -- $'qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9'
rmdir: failed to remove 'qoRSRba1C8bPYrpk_5OW6Qi9mPC.zhyzqUwivpQfArgb9': No such file or directory

Quando eu tento movendo-o para o lixo ou excluindo usando o Nautilus, Se parece com isso:

Nautilus showing a similar "No such file or directory" error


1
2017-08-23 22:19


origem


Você poderia adicionar o caminho completo desses arquivos e nos informar em que tipo de sistema de arquivos eles estão armazenados? - Byte Commander
/media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR, todos estão no mesmo caminho que é a partição eu uso para manter todos os meus arquivos e dados e verificar suas propriedades eu vejo isso "Tipo: Pasta (inode / directory) ". - AliOuld
Ok, então é uma partição de dados separada no seu disco rígido interno. Em qual sistema de arquivos essa partição está formatada? Talvez ext4, NTFS, FAT32? Mostrar a saída de mount | grep '/media/me/702E29F142F' por favor. - Byte Commander
a partição formatada com NTFS. - AliOuld
me @ MyPC: ~ $ rm -d /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR rm: não é possível remover '/media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0z1A62Sh25BS0pYZEby6JDVvtMZavFTCUgQUpjuJUCZ0pKspQLd40O3Zc9rzgGRFcxNBKOgr7KnVwZw_A4kkx4R9zq1oON8aP4y00EY0AuIJYRdCs9v9oYNKrFasQoMXwuLiw5lh0Z8J6Jh8u8pjDNnP31p0oBYsjTQTPUE1MXVqgAuWNjrhtEFuouXKR': Nenhum tal lima ou diretório - AliOuld


Respostas:


Alguns de seus nomes começam com -então passe -- primeiro ou use um caminho absoluto.

Para diretórios vazios, use o rmdir comando e escrever -- como uma palavra separada antes do nome do primeiro diretório a ser removido. E se -- não foi passado (isso se aplica aos comandos que você tentou, bem como rmdir) palavras que começam com - serão interpretados como coleções de opções controlando como o comando se comporta em vez de como nomes de arquivos para o comando operar.

Você terá que escrever seus comandos com base nos nomes de diretório que você possui. Devido a possíveis erros na formatação dos nomes de arquivos no editor visual do Stack Exchange, esse é um caso em que não recomendo copiar diretamente dessa resposta. No entanto, como um exemplo que espero que você modifique conforme necessário, se você tiver um diretório cujo nome seja:

-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

E está vazio, e você está no diretório pai (você pode usar cd para ir lá e pwd para verificar em qual diretório você está atualmente), então você pode removê-lo assim:

rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

Ou, se for de propriedade do root ou se você não tiver permissões para removê-lo:

sudo rmdir -- -9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

Observe que há um espaço após o -- argumento. Aquilo é importante.

Ou você pode usar o caminho completo do diretório. Então você não precisa se preocupar com o diretório em que está quando executa o comando e -- é opcional. Por exemplo (com base no que você mostrou em um comentário):

rmdir /media/me/702E29F142F/-9tDCcQrfg8u8e.AlOYZ7DX0q-ZRR77j9q8Gq0‌​z1A62Sh25BS0pYZEby6J‌​DVvtMZavFTCUgQUpjuJU‌​CZ0pKspQLd40O3Zc9rzg‌​GRFcxNBKOgr7KnVwZw_A‌​4kkx4R9zq1oON8aP4y00‌​EY0AuIJYRdCs9v9oYNKr‌​FasQoMXwuLiw5lh0Z8J6‌​Jh8u8pjDNnP31p0oBYsj‌​TQTPUE1MXVqgAuWNjrht‌​EFuouXKR

(Ou com sudo rmdircomo acima.)

Alguns nomes podem conter caracteres que exigem citação.

Se isso não ajudar e você continuar recebendo o mesmo Não existe tal arquivo ou diretório mensagem, então o problema é que você não está nomeando com sucesso os diretórios. Presumivelmente, seus nomes contêm caracteres incomuns.

Não é óbvio que este é o caso com base no que você mostrou, mas é um problema comum, então estou incluindo apenas no caso. Se os nomes dos diretórios contiverem espaços ou outros caracteres tratados especialmente pelo shell, como quebras de linha, *ou $, então você deve colocar os nomes entre aspas simples. Isso será suficiente, desde que os nomes não contenham aspas simples.

Mais geralmente, se você usou cd Para chegar ao diretório que contém esses diretórios, você deve ser capaz de obter uma lista de entradas nesse diretório (incluindo os subdiretórios que você está interessado em remover) executando:

ls -1b

Isso difere de um comum ls comando de duas maneiras úteis:

  • o -b flag faz com que os caminhos sejam impressos com seqüências de escape que podem ser coladas entre $'  '. Nenhum espaço deve aparecer entre o inicial $ e a abertura ' personagem.
  • o -1 bandeira faz ls listar uma entrada por linha. Isso pode ajudar a diminuir a confusão sobre onde um nome de arquivo termina e o próximo começa.

Isso deve permitir que você escreva comandos que removem, renomeiam etc. esses diretórios. Se eles estiverem realmente vazios, você pode usar o rmdir comando para removê-los. Você pode precisar executar este comando como root, o que você pode fazer com sudo.

Aqui está uma ilustração deliberadamente supersimplificada de quais comandos você pode executar. Suposto ls -1b listados:

abc\ def
ghi\njkl
pqr\b\b\bstuv
$$$$$$$\b\b\b$$$

No primeiro caso, há um espaço. No segundo caso, há uma nova linha (uma quebra de linha). No terceiro caso, existem três caracteres de retrocesso. No quarto caso, que existem ambos $ e caracteres de retrocesso.

Para remover esses diretórios, você pode usar:

rmdir -- $'abc\ def'
rmdir -- $'ghi\njkl'
rmdir -- $'pqr\b\b\bstuv'
rmdir -- $'$$$$$$$\b\b\b$$$'

Como acima, você pode precisar sudo.

rmdir pode ter vários nomes de arquivos, mas se você usar um comando por remoção, será mais fácil entender as mensagens de erro recebidas, se houver.

Nesses exemplos específicos, os nomes de diretório não começaram com - e a -- bandeira não era necessária. Mas isso não causou nenhum dano.

$'  ' versus simples '  '

Ao contrário de citar com '  ', citando com $'  ' faz com que escapes de backslash como \n e \b para ser expandido.

'ghi\njkl' identifica um arquivo cujo nome é literalmente:

  • ghi\njkl

Em contraste, $'ghi\njkl' identifica um arquivo cujo nome é:

  • ghi jkl

Se você estiver executando um navegador de arquivos gráficos, poderá arrastar a partir dele.

Com alguns navegadores de arquivos gráficos (como Nautilus, ou seja, "Arquivos") e alguns terminais (como o Terminal GNOME), há uma maneira ainda mais fácil de obter um caminho absoluto utilizável para um arquivo em um comando de terminal que você está escrevendo.

Isso funcionará na maioria dos sistemas Ubuntu que possuem uma interface gráfica instalada, mas praticamente nunca funcionará quando você estiver efetuando o login remotamente via SSH.

Você pode arraste a pasta da janela do navegador de arquivos na janela do terminal para colar o caminho completo para ele no terminal. Com o mouse sobre a janela do terminal, solte o botão.

Para que isso seja útil, a melhor abordagem é escrever o comando que você deseja executar primeiro. Por exemplo, escreva isto e incluir um espaço no final mas não pressione Entrar ainda:

rmdir --

Em seguida, arraste a pasta da janela do navegador de arquivos para a janela do terminal. Se o seu navegador de arquivos e emulador de terminal suportarem, você deverá ver um caminho colado, com \ou ' cotação baseada automaticamente fornecida. Você pode então pressionar Entrar para executar o comando. Mesmo que o comando não tenha êxito, isso geralmente dará uma mensagem de erro mais útil do que Não existe tal arquivo ou diretório.


5
2017-08-23 23:00



Eu segui cada passo e tentei todas as sugestões e nenhuma foi útil, no entanto, sou grato por sua ajuda, eu acho que não tenho escolha senão aceitar esses diretórios até que eu tenha a chance de formatar essa partição. - AliOuld
Primeiro eu digitei este comando 'ls -1b' que mostrou o conteúdo de / media / me / 702E29F142F2362F entre eles os três culpados e parece que seus nomes são os mesmos, e então eu usei o comando rmdir - com aspas simples, ou rmdir - sem aspas simples, ou rrmdir - $ 'directory', e sempre obtém a mesma saída "No such file or directory" - AliOuld
@AliOuld Você pode copiar todos o texto do terminal, a partir da linha que mostra o prompt de um comando que você executou, até o último caractere de texto mostrado no terminal, e cole na sua pergunta? Não há uma boa maneira de descobrir quais são os nomes ou qual problema é apenas uma informação incompleta em comentários como este. Existem outras abordagens - por exemplo, você pode tentar arrastar os diretórios do navegador de arquivos para o seu terminal se o seu terminal suportar, eu adicionarei isso - mas se você expandir sua pergunta então deve ser possível saber o que provavelmente trabalhos. - Eliah Kagan
@AliOuld Mesmo que você não consiga fazer o texto aparecer corretamente depois de colá-lo na sua pergunta, você ainda pode salvar a edição e me informar e eu posso ver a fonte e corrigi-la sozinho (assumindo que o site permita que você envie a edição dessa maneira) . - Eliah Kagan
Eu editei meu post original, você pode ver o texto. - AliOuld


Método gráfico

eu usaria nautilus o gerenciador de arquivos embutido no Ubuntu. Basta destacar os diretórios, clique com o botão direito e selecione "enviar para a lixeira". Se os diretórios tiverem arquivos grandes, talvez você queira esvaziar a lixeira imediatamente.

Se os diretórios forem de propriedade do root, o Nautilus não permitirá que você os exclua. Neste caso, abra um terminal e use:

gksu nautilus

Não é possível mover para o lixo, mas pode excluir diretamente

De acordo com isso Pergunta do Linux Mint alguns arquivos do Windows não podem ser movidos para o lixo, mas podem ser excluídos diretamente.

Outra resposta neste encadeamento indica como descobrir o tipo de sistema de arquivos usando:

df -T /media/<path_to_project_folder>

Então mudando o /etc/fstab A entrada funcionou para montagem usando parâmetros diferentes e excluindo os arquivos com êxito.


Método Terminal

De acordo com este Super usuário Q & A você pode apagar arquivos com caracteres especiais (nomes estranhos) mudando para o diretório que os contém e usando:

rm -i -- *

Isso solicitará que você exclua cada arquivo. Você pode e deve alterar '*' para uma correspondência mais restrita se houver muitos arquivos. o -- pára as opções de processamento, portanto, um arquivo chamado -d será removido por rm com sucesso.

Outra resposta no mesmo segmento propõe a exclusão pelo número de inode usando. Diz que você pode usar ls -li para mostrar todos os arquivos pelo seu inode. Em seguida, execute este comando para remover o arquivo:

find . -inum ${INODE_NUM} -delete

Você pode adicionar -maxdepth 1 para meu achado só para estar seguro:

find . -maxdepth 1 -inum ${INODE_NUM} -delete

2
2017-08-24 14:56



ver a foto na minha edição, nada funcionou e está realmente ficando chato. obrigado de qualquer maneira por sua entrada. - AliOuld
Gostaria de saber se é permissões ou problema de montagem. Você pode clicar na seta para baixo para mostrar mais detalhes e postar uma nova captura de tela, por favor? - WinEunuuchs2Unix
Por si só, a falta de permissões ou de propriedade não deve causar um erro "Não há arquivo ou diretório", especialmente localmente, mas concordo que isso pode ser útil para reduzir ainda mais o problema. ... Isso me faz pensar se talvez esses diretórios realmente não faça existe e só está sendo mostrado devido a um bug no kernel ou no driver. Ou seja, talvez em vez de os nomes dos arquivos estarem errados devido a caracteres estranhos (como eu suspeitava), eles estão errados porque realmente não existe mais esse arquivo com esse nome. @AliOuld Você já tentou reiniciar para ver se eles ainda estão lá? Você também pode adicionar a saída de mount? - Eliah Kagan
esses diretórios foram criados em 25 de julho, então agora é um mês completo, você pode imaginar quantas vezes eu desliguei ou reiniciei meu computador, eu li em algum lugar que é bug causado por bleachbit 1.10 ou outra versão eu realmente não lembre-se, talvez eu desmonte a partição e veja, essa é a sua sugestão? - AliOuld
Todas essas coisas parecem valer a pena, mas acho que você deve clicar na seta para baixo para obter uma mensagem de erro detalhada, como a tela está oferecendo. - WinEunuuchs2Unix