Exclui o diretório indiretamente dentro de si

9

Eu tenho um diretório dentro de si. Como posso deletar?

~/.local/share/Trash/files$ ls devices/
reg-dummy
~/.local/share/Trash/files$ ls devices/reg-dummy/
subsystem
~/.local/share/Trash/files$ ls devices/reg-dummy/subsystem/
devices

~/.local/share/Trash/files$ find devices/ | head -n 20
devices/
devices/reg-dummy
devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices
devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy/subsystem/devices/reg-dummy

Além disso, embora meu cérebro não consiga resolver o problema da parada, parece que sudo rm -rf devices continua sem produzir produção.

~/.local/share/Trash/files$ sudo rm -rf devices
^C~/.local/share/Trash/files$

Mesma coisa para perl -e 'use File::Path qw(remove_tree); remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")' . Mesma coisa para du -s devices/ . Mesma coisa para du -sch ~/.local/share/Trash/ Outros comandos

$ cd ~/.local/share/Trash/files/devices/reg-dummy/subsystem/devices/
$ ls -ldi 
8131921 drwxr-xr-x 3 theking theking 4096 Mar 17 19:43 .
$ cd reg-dummy/subsystem/devices/
$ ls -dli
8131926 drwxr-xr-x 3 theking theking 4096 Mar 17 19:43 .


$ find .local/share/Trash/files/ -maxdepth 1 -delete
find: cannot delete '.local/share/Trash/files/devices': Directory not empty
find: cannot delete '.local/share/Trash/files/': Directory not empty

Eu não quero que ele fique preso no meu lixo para sempre!

Nota: Eu estava fazendo um backup grosseiro de um computador simplesmente usando scp , mas fiquei sem espaço e isso aconteceu.

    
por PyRulez 18.03.2014 / 21:57

3 respostas

3

A saída de ls -ldi mostrará o número de inode do diretório. Se o diretório dentro do diretório realmente tiver o mesmo número de inode que seu ancestral, em vez de apenas o mesmo nome, então seu sistema de arquivos está corrompido e você precisará inicializar no modo de recuperação e fsck.

    
por psusi 20.03.2014 / 00:34
1

Eu ainda acho que rm -rf funcionará se você der tempo suficiente, mas se não, um ou ambos devem:

perl -e 'use File::Path qw(remove_tree); 
        remove_tree("$ENV{HOME}/.local/share/Trash/files/devices")''

find .local/share/Trash/files/ -delete

Você pode ter certeza de que alguma coisa está acontecendo se você usar rm -rfv ~/.local/share/Trash/files/devices , pelo menos, para informar que os arquivos estão sendo excluídos.

De qualquer forma, isso não pode ser um problema de hardlink (apesar do meu comentário muito errado) porque os diretórios não podem ter hardlink no Linux. Em geral, quando você tem uma recursão infinita, como pode acontecer com os softlinks, você receberá uma mensagem com esse efeito, que não parece acontecer.

A outra possibilidade que posso pensar é que a pasta Lixeira é um estranho sistema próprio. Eu realmente não sei como funciona, nunca uso. No entanto, você pode ter mais sorte em excluir os arquivos de nível superior diretamente, em vez de segmentar o diretório problemático:

rm -rf ~/.local/share/Trash/* 

Você também deve tentar esvaziar a pasta Lixeira da GUI, basta selecionar Lixeira e clicar em "Esvaziar lixeira", ver se isso funciona.

    
por terdon 18.03.2014 / 23:36
0

(Estou confiante de que isso funcionará e, como irei viajar agora, deixarei isso como uma resposta que poderei excluir no futuro, se não funcionar).

  1. Primeiro, para ser seguro, corra

    find ~/.local/share/Trash/files/devices/ -exec echo {} \;
    
  2. Em segundo lugar, se a saída de "1" não mostrar nenhum arquivo importante, execute

    find ~/.local/share/Trash/files/devices/ -exec rm {} \;
    
  3. O passo final seria

    find ~/.local/share/Trash/files/devices/ -empty -type d -delete
    
por desgua 18.04.2014 / 15:09

Tags