find . -type d -exec sh -c '(ls -p "{}"|grep />/dev/null)||echo "{}"' \;
Mais lento que
find . -type d -links 2
de qualquer maneira.
dada a seguinte estrutura:
oz123@debian:~/ $ tree .
.
├── a
│ ├── a1
│ ├── a2
│ └── a3
├── a1
│ ├── a11
│ ├── a12
│ └── a31
├── b
│ └── b1
│ ├── b11
│ │ └── b21
│ │ └── b31
│ ├── b12
│ └── b3
└── c
16 directories, 0 files
Eu encontrei as seguintes soluções que parecem serem boas, mas eu tenho que provar que não há caso de teste que irá falhar.
A página de ajuda dos estados -links
:
You can also search for files that have a certain number of links, with ‘-links’. Directories normally have at least two hard links; their . entry is the second one. If they have subdirectories, each of those also has a hard link called .. to its parent directory. The . and .. directory entries are not normally searched unless they are mentioned on the find command line.
oz123@debian:~/ $ find . -type d -links 2
./a/a2
./a/a3
./a/a1
./c
./a1/a31
./a1/a11
./a1/a12
./b/b1/b12
./b/b1/b3
./b/b1/b11/b21/b31
find . -type d -exec sh -c '(ls -p "{}"|grep />/dev/null)||echo "{}"' \;
Mais lento que
find . -type d -links 2
de qualquer maneira.
Experimente o seguinte one-liner:
find . -type d -execdir sh -c 'test -z "$(find "{}" -mindepth 1 -type d)" && echo $PWD/{}' ';'