Como encontrar diretórios vazios no unix [duplicado]

2

Eu quero mostrar todos os diretórios vazios em meu diretório inicial, usando o shell script, você pode me ajudar a encontrar o código? (sem usar find ' -empty )

    
por EmEsEn 18.12.2015 / 14:05

3 respostas

6

Usando o GNU find :

find ~ -type d -empty

(isso procura diretórios vazios a partir do seu diretório pessoal).

    
por 18.12.2015 / 14:07
1

Se você quiser encontrar diretórios vazios que estão em seu diretório home, exceto todos os diretórios vazios sob a árvore home, você pode usar o GNU find :

find ~ -maxdepth 1 -type d -empty

    
por 18.12.2015 / 14:15
1

Se a sua descoberta não tiver -empty bandeira (por exemplo, exclua a de busbox ou qualquer outra POSIX-conformant find ), você tem que fazer assim (inspirado por @ jordanm resposta , usando bash :

find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; 
  a=("$1"/*); [[ ${a[@]} ]] || printf "%s\n" "$1"' sh {} \;
  • -type d encontra somente diretórios
  • -exec bash -c '...' sh {} \; chama um shell bash para todos os diretórios encontrados
    • shopt -s nullglob; shopt -s dotglob nesse bash instance, nullglob evita que o bash retorne o padrão quando não combina nada. dotglob inclui arquivos e diretórios que começam com um ponto ( . ).
    • a=("$1"/*) preenche a matriz $a com todos os itens no diretório de processamento
    • [[ ${a[@]} ]] verificar se $a contém itens. Se não ...
    • printf "%s\n" "$1" imprime o nome do diretório

Se você quiser processar essa lista ainda mais, certifique-se de delimitar os itens por nullbyte:

find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; 
      a=("$1"/*); [[ ${a[@]} ]] || printf "%s
find . -type d -exec bash -c 'shopt -s nullglob; shopt -s dotglob; 
  a=("$1"/*); [[ ${a[@]} ]] || printf "%s\n" "$1"' sh {} \;
" "$1"' sh {} \; | xargs -0 ...
    
por 18.12.2015 / 15:04