Listar todas as pastas vazias

2

Eu tenho um monte de pastas aninhadas. A maioria das pastas contém arquivos. Alguns contêm centenas de milhares de arquivos. Alguns estão vazios.

Eu quero obter uma lista de todas as pastas vazias. No entanto, quando eu corro:

find -type d -empty

leva muito tempo muito para ser executado, muito mais tempo do que o necessário para executar apenas find -type d . Eu suspeito que -empty está verificando todos os arquivos para ver se eles estão vazios, então -type d está ignorando os arquivos.

Então está lá:

1) uma forma de otimizar a localização para que a) encontre todas as pastas, b) liste as vazias?

ou

2) um comando diferente (ou comandos) que eu poderia usar para obter essa lista?

    
por David Oneill 03.11.2010 / 17:23

4 respostas

2

Tente isso

find / -xdev -type d -exec find {}  -maxdepth 0 -empty  \;

ou o mais rápido marginalmente

find / -xdev -type d | xargs -I{} find {} -maxdepth 0 -empty
    
por 03.11.2010 / 18:57
1
find -type d | xargs -I{} find {} -empty
    
por 03.11.2010 / 17:39
0

Acabei de testar e não consigo obter seu resultado:

japhy@lizard:~ % time find . -type d |wc -l       
48403
find . -type d  0.87s user 8.69s system 4% cpu 3:37.60 total
japhy@lizard:~ % time find . -type d -empty |wc -l
3986
find . -type d -empty  0.79s user 4.41s system 57% cpu 9.071 total
japhy@lizard:~ % time find . -empty -type d |wc -l       
3986
find . -empty -type d  0.70s user 3.32s system 98% cpu 4.085 total
japhy@lizard:~ % find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION SELINUX FTS() CBO(level=0) 

Qual é a sua versão do utilitário 'find'? Versão de distribuição?

    
por 03.11.2010 / 17:40
0

Esses argumentos para localizar não são opções para serem interpretadas em qualquer ordem encontrada - encontrar é um processador de linha de comando, e cada uma dessas coisas é um teste para ser executado em seqüência. Sua linha de comando está fazendo as coisas na ordem exata que você especificou: está localizando diretórios e, em seguida, verificando se estão vazios. Eu não acho que existam truques envolvendo o achado para fazer isso mais rápido.

    
por 03.11.2010 / 18:21

Tags