given the following structure:

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

16 directories, 0 files

How do I find all the end nodes?

I found the following solutions which seems to be good, but I have to proof that there is not test case which will fail it.

The help page of the -links states:

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.

possible solution:

oz123@debian:~/ $ find .  -type d  -links 2
  • Can anyone provide a better solution (without using pipes and sed, this has be performant ...)
  • Will it work on any filesystem?
  • It will work on any UNIX filesystem, don't know how the vfat and ntfs-3g drivers emulate inode semantics. – Hubert Kario Aug 12 '13 at 8:40
  • @HubertKario, a most important question will it work on NetApp filers over NFS? – Oz123 Aug 12 '13 at 8:56
  • I'm not sure about NetApp, but it works over NFS between Linux boxes so I'd guess that yes. – Hubert Kario Aug 13 '13 at 13:58


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

Slower than

find .  -type d  -links 2



Try the following one-liner:

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.