Comando para excluir diretórios cujo conteúdo é menor que um determinado tamanho

3

Estou trabalhando em um diretório ~/foo que tem subdiretórios

~/foo/alpha
~/foo/beta
~/foo/epsilon
~/foo/gamma

Eu gostaria de emitir um comando que verifica o tamanho total em cada subdiretório "nível 1" de ~/foo e exclui o diretório junto com seu conteúdo se o tamanho estiver abaixo de um determinado valor.

Digamos que eu queira excluir os diretórios cujo conteúdo tenha menos de 50K . Emitindo $ du -sh */ retornos

8.0K alpha/
114M beta/
20K  epsilon/
1.2G gamma/

Gostaria que meu comando excluísse ~/alpha e ~/epsilon junto com seu conteúdo. Existe tal comando? Eu suspeito que isso pode ser feito com find de alguma forma, mas não tenho certeza de como.

    
por Brian Fitzpatrick 06.07.2015 / 06:47

2 respostas

11

Com o GNU find e o GNU coreutils , e supondo que seus diretórios não tenham novas linhas em seus nomes:

find ~/foo -mindepth 1 -maxdepth 1 -type d -exec du -ks {} + | awk '$1 <= 50' | cut -f 2-

Isto irá listar diretórios com conteúdo total menor que 50K. Se você estiver satisfeito com os resultados e quiser excluí-los, adicione | xargs -d \n rm -rf ao final da linha de comando.

    
por 06.07.2015 / 07:29
-1

A primeira resposta funciona bem, mas não com o nome da pasta que contém espaços. (lógica corrigida porque era algo de 50Kb ou mais)

#RESULTTODELETE=$(find ~/foo -mindepth 1 -maxdepth 1 -type d -exec du -ks {} + | awk '$1 <= 50' | cut -f 2-); RESULTTODELETE2=$(echo "$RESULTTODELETE" | sed 's, ,\ ,g'); echo "$RESULTTODELETE2" | xargs rm -rf

Trabalhará com:

~/f oo/a lpha
~/fo o/be ta
~/f o o/ep silon
~/foo/gamma
    
por 02.01.2017 / 13:04