Bash 让find只显示最后一项

Bash 让find只显示最后一项,bash,find,Bash,Find,我认为这是一个棘手的问题 我有一个包含N个递归子目录的目录。例如: /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 /

我认为这是一个棘手的问题

我有一个包含N个递归子目录的目录。例如:

/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,因为我知道子文件夹的数量是随机的。

假设
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

假设
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

您可以使用
-links
选项筛选出只有两个链接(一个链接到父级,一个链接到自身)的目录,如下所示:


目录的
链接数
计算为指向每个子目录的链接+指向自身的链接+指向父目录的链接。后两者始终存在,因此任何目录的链接计数均大于等于2。对于没有其他子目录的目录,计数正好是2,这是您想要的。

您可以使用
-links
选项筛选出只有两个链接(一个链接到父目录,一个链接到自身)的目录,如下所示:


目录的
链接数
计算为指向每个子目录的链接+指向自身的链接+指向父目录的链接。后两者始终存在,因此任何目录的链接计数均大于等于2。对于没有其他子目录的目录,计数正好是2,这就是您想要的。

谢谢。据我所知,从一个简短的测试,这完美地解决了我的问题。谢谢。据我所知,从一个简短的测试,这完美地解决了我的问题。