Como apagar diretórios que contêm menos de um certo número de arquivos

2

Como posso encontrar e excluir subdiretórios que contenham menos de 100 arquivos (ou 200 arquivos)?

Eu encontrei e usei o seguinte comando, mas não sei como excluir os subdiretórios listados. (Eu tenho mais de 1000 dessas pastas e subdiretórios, não posso fazer isso manualmente).

find . -maxdepth 5 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; | awk '$NF<=10'

obrigado!

    
por art 06.09.2016 / 11:26

2 respostas

0

Abaixo, incluí a resposta à sua pergunta, mas gostaria de enfatizar que você precisa ter extrema cautela com esse comando. A saída do seu original awk está sendo canalizada para rm -rf , isso significa que esse comando está removendo à força todas as pastas listadas.

Certifique-se de que você é muito cuidadoso sobre onde você executa isso porque, se executado na maioria dos lugares, isso pode causar problemas enormes ou danos irreparáveis ao sistema.

find . -maxdepth 5 -type d -exec bash -c "echo -ne '{} '; ls '{}' | wc -l" \; -print0 | awk '$NF<=10' | xargs rm -rf

A saída do seu comando original está sendo canalizada para xarge rm -rf , xargs está convertendo a saída original em argumentos para outro programa, neste caso, rm .

Trecho da página manp para rm para os dois switches usados:

       -f, --force
          ignore nonexistent files, never prompt

       -r, -R, --recursive
          remove directories and their contents recursively

Pipar diretamente em rm não funcionaria, pois não espera receber nomes de arquivos ou pastas nesse formato.

    
por 06.09.2016 / 11:39
0

Abaixo o script está sujo, mas está funcionando solução.

Execute este script no env de teste antes de aplicar no computador de trabalho, pois ele excluirá o conteúdo

cd desired_directory
for i in 'find . -maxdepth 1 -type d | grep "/"'
do
   cd $i;
   j='echo \'ls -l | wc -l\' | bc'
   [ $j -lt "100" ] && echo "Lesser than 100 files/directories in $i"
   cd ../
done

Aqui, você precisa substituir a instrução echo por rm -rf ou mv .

    
por 06.09.2016 / 12:26