Назад | Перейти на главную страницу

найти все конечные подкаталоги в дереве

учитывая следующую структуру:

oz123@debian:~/ $ tree .
.
├── a
│   ├── a1
│   ├── a2
│   └── a3
├── a1
│   ├── a11
│   ├── a12
│   └── a31
├── b
│   └── b1
│       ├── b11
│       │   └── b21
│       │       └── b31
│       ├── b12
│       └── b3
└── c

16 directories, 0 files

Как мне найти все конечные узлы?

Я нашел следующие решения, которые кажется чтобы быть хорошим, но я должен доказать, что не существует тестового примера, который бы его провалил.

Страница справки -links состояния:

Вы также можете искать файлы с определенным количеством ссылок с помощью «-links». Каталоги обычно имеют как минимум две жесткие ссылки; их. запись вторая. Если у них есть подкаталоги, каждый из них также имеет жесткую ссылку, называемую .. на его родительский каталог. Файл. и .. записи каталога обычно не ищутся, если они не упомянуты в командной строке поиска.

возможное решение:

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

https://stackoverflow.com/questions/4269798/use-gnu-find-to-show-only-the-leaf-directories

find . -type d -exec sh -c '(ls -p "{}"|grep />/dev/null)||echo "{}"' \;

Медленнее чем

find .  -type d  -links 2

тем не мение.

Попробуйте следующий однострочник:

find . -type d -execdir sh -c 'test -z "$(find "{}" -mindepth 1 -type d)" && echo $PWD/{}' ';'