elimina milhões de ficheiros dentro de um directório [duplicado]

1

No outro dia eu corri bleachbit no meu sistema. Eu tinha habilitado a opção de limpar o espaço em disco nele. Demorou várias horas e meu espaço em disco preenchido completamente (100GB ou mais). Depois de esperar para sempre, decidi encerrar o programa e excluir os arquivos manualmente.

Agora, o problema: não consigo excluir os arquivos ou o diretório. Eu não posso fazer um ls dentro do diretório. Eu tentei rsync -a --delete, wipe, rm, diferentes combos de find & rm, etc

Eu segui as instruções aqui e notei o "Directory Index Full!" erro em meus logs também. rm em um diretório com milhões de arquivos

Percebi que o comando stat retornou um tamanho de diretório extraordinariamente grande de mais de um GB. Geralmente é apenas 4096 ou algo em torno de dezenas de milhares.

nameh@labs ~ % stat kGcdTIJ1H1                                                                            
  File: ‘kGcdTIJ1H1’
  Size: 1065287680  Blocks: 2080744    IO Block: 4096   directory
Device: 24h/36d Inode: 9969665     Links: 2
Access: (0777/drwxrwxrwx)  Uid: ( 1000/  nameh)   Gid: ( 1000/  nameh)
Access: 2014-10-31 07:43:08.848104623 +0530
Modify: 2014-10-31 07:43:19.727719839 +0530
Change: 2014-10-31 07:43:19.727719839 +0530
 Birth: -

O comando "ONLY", que até agora parece ser capaz de excluir arquivos dentro deste diretório, é o comando srm (secure toolkit de eliminação pelo THC). Todos os outros comandos não funcionam. O srm já está funcionando há 20 horas e liberou cerca de 1,1 GB até o momento. Está sendo executado com o modo menos seguro.

sudo srm -v -rfll kGcdTIJ1H1

Idéias?

edit: Minha pergunta é "como eu apago o diretório rapidamente?". Como em poucas horas ou mais, sem ter que gastar vários dias para apagar os arquivos. rm -rf não faz nada.

    
por eternaltyro 31.10.2014 / 03:25

3 respostas

2

Eu tive problema semelhante, onde uma das partições foi preenchida com milhões de arquivos e, portanto, consumi todos os inodes disponíveis, mesmo que o sistema de arquivos tenha quase 20 GB de espaço livre. Não consegui criar nenhum arquivo porque inodes foram exa- .

Então, eu corri o comando find que delapidou 1,4 milhões de arquivos. Demorou bastante tempo, pois com o find e exec combo find irá passar cada arquivo para o functoin que por sua vez executa o comando rm no arquivo

cd / para / diretório encontrar . -tipo f -exec rm {} \;

OR

Você pode querer experimentar xargs

encontre. -tipo f | xargs rm

Ambos os comandos funcionaram para mim

espero que ajude.

    
por 31.10.2014 / 11:03
2

você pode usar este truque perl:

perl -e 'chdir "/path/to/dir" or die; opendir D, "."; while ($n = readdir D) { unlink $n }'

o que isto faz é, primeiro, ir para o diretório, abri-lo e excluir (unlink) todos os arquivos nele sem obter primeiro a lista de todos os arquivos (provavelmente rm está engasgando).

O truque não é meu, mas o de Randal L. Schwartz: link

    
por 31.10.2014 / 15:30
1

você pode tentar o seguinte

encontre. -tipo d -print -delete #drop -print para não ver o que você excluir, acho que este é o mais gordo

encontre. -tipo f -exec rm {} \; #slower que acima

encontre. -mtime +29 -print | xargs ls -d

    
por 31.10.2014 / 15:54