Usar ls
geralmente não é uma boa ideia para analisar o sistema de arquivos. Use find
para este tipo de trabalho.
lista de diretórios não vazios
Se você quiser uma lista de diretórios que não estejam vazios, você pode usar o seguinte comando:
Dados da amostra:
$ tree
.
|-- empty1
|-- empty2
|-- empty3
|-- full1
| |-- division_A
| |-- empty1
| '-- full1
| '-- afile
|-- full2
| |-- division_A
| |-- empty2
| '-- full2
| '-- afile
'-- full3
|-- division_A
|-- empty3
'-- full3
'-- afile
Você pode então usar este comando:
$ find . -mindepth 1 -not -empty -type d
./full3
./full3/full3
./full2
./full2/full2
./full1
./full1/full1
Esta é uma lista de todos os diretórios que estão NOT vazios. Essa saída pode ser limpa usando awk
e uniq
, se necessário.
O comando acima como compatível com POSIX seria:
$ find . -type d -exec sh -c '[ -n "$(ls -UA "$1/" )" ]' dummy {} \; \
-print |grep -v '^.$'
Lista de dirs. que contêm dir. division_A
Se, no entanto, você estiver procurando por uma lista de diretórios que contenham "division_A", use este comando find para fazer isso:
$ find . -type d -name "division_A" -exec dirname {} \;|sort -u
./full1
./full2
./full3
Aqui você pode usar sed
para limpar a saída, se necessário:
$ find . -type d -name "division_A" -exec dirname {} \;| sed 's/\.\///' |sort -u
full1
full2
full3