Como você remove diretórios vazios aninhados usando um script Bash no Linux?

3

Eu quero poder executar um script que removerá todos os meus diretórios vazios. O problema é que alguns deles são aninhados, ou seja, diretórios que só têm diretórios vazios, portanto, o script precisa ser recursivo.

Eu sei disso:

find /media/server/data001/Unprotected/Downloads/ -type d -empty -exec rmdir {} \;

mas não tenho ideia de como executá-lo novamente até que todos os diretórios aninhados tenham sido processados e, em seguida, interrompidos.

    
por dave 19.05.2013 / 13:12

1 resposta

11

O que você precisa é de travessia em profundidade . Com isso, você começaria no diretório mais profundo e depois subiria. find tem uma opção para isso, então você pode simplesmente executar:

find /some/path -depth -type d -exec rmdir {} \;

Você pode querer suprimir adicionalmente os avisos para diretórios não vazios. Você pode adicionar 2>/dev/null no final para isso.

Com o% GNUfind (e outros como o% BSDfind no OS X), você pode otimizar o comando - e executá-lo sem avisos - usando -empty , como você fez acima.

find /some/path -depth -type d -empty -exec rmdir {} \;
    
por 19.05.2013 / 13:19