我认为这是一个棘手的问题。
我有一个包含N个递归子目录的目录。 E.g:
/tmp/dir1/dir2
/tmp/dir2
/tmp/dir3/dir4/.../dir7
/tmp/dir4/.../dirN
如果我使用find / tmp,我会得到这样的输出:
/tmp/dir1
/tmp/dir1/dir2
/tmp/dir2
/tmp/dir3
/tmp/dir3/dir4
...
但我只想获得子树中最后一个文件夹的完整路径,而不是单独列出的父目录。
所以在这种情况下:
/tmp/dir1/dir2
/tmp/dir2
/tmp/dir3/dir4
我不能使用mindepth和maxdepth,因为我的子文件夹数量是随机的。
答案 0 :(得分:3)
您可以使用-links
选项过滤掉只有两个链接的目录(一个链接到父级,一个链接到自身),如下所示:
find dir -type d -links 2
目录的links
个数被计为每个子目录的链接+指向self的链接+指向父级的链接。后两者总是存在,所以任何目录的链接数都是> = 2.对于没有其他子目录的目录,计数正好是2,这就是你想要的。
答案 1 :(得分:1)
假设find /tmp
有此输出:
$ find /tmp
/tmp/dir1
/tmp/dir1/dir2
/tmp/dir2
/tmp/dir3
/tmp/dir3/dir4
您可以添加awk过滤器以仅打印每个类别的最后一行:
$ find /tmp | awk -F/ 'p!=$3&&NR>1{print l}{p=$3;l=$0}END{print l}'
/tmp/dir1/dir2
/tmp/dir2
/tmp/dir3/dir4