Tip: how to get the deepest directories


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Tip: how to get the deepest directories
# 1  
Old 02-19-2016
Lightbulb Tip: how to get the deepest directories

A couple of times there was the question: in a directory hierarchy how to display the deepest directories only.
For example in Help with listing only subfolders.
My hot solution at that time was (in short)
Code:
find . -depth -type d | awk -F / 'NF>=p; {p=NF}'

But another article has opened my eyes for the cool solution
Code:
find . -depth -type d -links 2

Smilie
In fact I had implemented that a long time ago in a Unix cleantmp solution; the task is to run rmdir on non-empty directories, and in the absence of -empty the -links 2 is the closest approach: an rmdir can only work on the deepest directories.
These 3 Users Gave Thanks to MadeInGermany For This Post:
# 2  
Old 07-29-2016
Just found another optimization:
Code:
find . -type d -links 2 -prune

Skips the readdir:s of the deepest directories.
This User Gave Thanks to MadeInGermany For This Post:
# 3  
Old 07-29-2016
That is cool approach, even though it is not foolproof, since an extra hard link will mess up the result, although in practice that probably/usually will not be the case,.
This User Gave Thanks to Scrutinizer For This Post:
# 4  
Old 07-29-2016
Good point. Yes, in practise there is hardly a need for hard-linking a directory. And there are even some risks.
# 5  
Old 07-29-2016
The POSIX standards don't require a directory to contain directory entries for dot and dot-dot. I assume that any filesystem type that does not include entries for dot and dot-dot would have a link count of 0 (not 2) for an empty directory.

But, I have never used a filesystem type that does not contain entries for dot and dot-dot. Does anyone know if any of these filesystems still exist?
This User Gave Thanks to Don Cragun For This Post:
# 6  
Old 07-29-2016
For the 101% safety
Code:
find . -type d -links -3 -prune

There are certainly some file systems without dot and dot-dot (HighSierra/ISO9660?). However, I think a LUnix driver will always emulate them.
# 7  
Old 07-29-2016
find(1) - Linux manual page
Quote:
-noleaf
Do not optimize by assuming that directories contain 2 fewer
subdirectories than their hard link count. This option is
needed when searching filesystems that do not follow the Unix
directory-link convention, such as CD-ROM or MS-DOS
filesystems or AFS volume mount points. Each directory on a
normal Unix filesystem has at least 2 hard links: its name and
its `.' entry. Additionally, its subdirectories (if any)
each have a `..' entry linked to that directory. When find is
examining a directory, after it has statted 2 fewer
subdirectories than the directory's link count, it knows that
the rest of the entries in the directory are non-directories
(`leaf' files in the directory tree). If only the files'
names need to be examined, there is no need to stat them; this
gives a significant increase in search speed.
To be honest, I never looked to see if a mounted CDROM used .. and . Good question, Don.

I assume this would apply to SMB mounts from FAT32 filesystems.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

[Tip] Housekeeping Tasks Made Easy - User Home directories and Leftover Files

We have regularly questions about how to create users and user accounts. But regularly user accounts need to be deleted too. It is quite easy to delete the user account itself but usually the HOME directory of the user remains. It is good style to remove these directories but simply deleting... (3 Replies)
Discussion started by: bakunin
3 Replies

2. Solaris

Giving read write permission to user for specific directories and sub directories.

I have searched this quite a long time but couldn't find the right method for me to use. I need to assign read write permission to the user for specific directories and it's sub directories and files. I do not want to use ACL. This is for Solaris. Please help. (1 Reply)
Discussion started by: blinkingdan
1 Replies

3. UNIX for Advanced & Expert Users

Tip: show the last 3 directories in the shell prompt

tcsh: have the following in .cshrc (or .tcshrc) set prompt=": " zsh: have the following in .zshrc PS1="%# " bash: have the following in .bashrc PS1='\$ 'Lacking direct support this is a good approximation. (0 Replies)
Discussion started by: MadeInGermany
0 Replies

4. UNIX for Dummies Questions & Answers

List the directories, having given pattern in the directories name, sorted by creation date

It is for HP-Unix B.11.31. Requirement: 1. List the directories, having given pattern in the directories name, sorted by creation date. Example: Directories with name "pkg32*" or "pkg33*" 2. On the output of 1. list the directories by creation date as sort order, with creation date... (2 Replies)
Discussion started by: Siva SQL
2 Replies

5. Shell Programming and Scripting

How to list all the files, directories and sub-directories in the current path except one directory?

Can anyone come up with a unix command that lists all the files, directories and sub-directories in the current directory except a folder called log.? Thank you in advance. (7 Replies)
Discussion started by: Manjunath B
7 Replies

6. UNIX for Dummies Questions & Answers

Using grep command to find the pattern of text in all directories and sub-directories.

Hi all, Using grep command, i want to find the pattern of text in all directories and sub-directories. e.g: if i want to search for a pattern named "parmeter", i used the command grep -i "param" ../* is this correct? (1 Reply)
Discussion started by: vinothrajan55
1 Replies

7. Shell Programming and Scripting

How to list all the directories, sub directories in a mount along with size in ascending order?

Hi , I am very new to unix as well as shell scripting. I have to write a script for the following requirement. In a particular mount, have to list all the directories and sub directories along with size of the directory and sub directory in ascending order. Please help me in this regard and many... (4 Replies)
Discussion started by: nmakkena
4 Replies

8. Shell Programming and Scripting

Script for parsing directories one level and finding directories older than n days

Hello all, Here's the deal...I have one directory with many subdirs and files. What I want to find out is who is keeping old files and directories...say files and dirs that they didn't use since a number of n days, only one level under the initial dir. Output to a file. A script for... (5 Replies)
Discussion started by: ejianu
5 Replies

9. Shell Programming and Scripting

check if multiple directories exist else create missing directories

Hi , I 'm trying to check if multiple directories exist on a server, if not create the missing ones and print " creating missing directory. how to write this in a simple script, I have made my code complex if ; then taskStatus="Schema extract directory exists, checking if SQL,Count and... (7 Replies)
Discussion started by: ramky79
7 Replies
Login or Register to Ask a Question