在目录中查找文件夹,而不列出父目录

问题描述 投票:0回答:5

无法列出我不在其中的文件夹的内容,同时排除实际的文件夹名称本身。

例如:

root@vps [~]# find ~/test -type d
/root/test
/root/test/test1

但是我希望它只显示 /test1,例如。

想法?

linux bash find
5个回答
42
投票

简单一点也没有什么问题

find ~/test -mindepth 1

同样,这也会有同样的效果:

find ~/test/*

因为它匹配

~/test/
中包含的所有内容,但不匹配
~/test
本身。

顺便说一句,您几乎肯定会发现

find
会抱怨
-mindepth n
选项位于任何其他开关之后,因为顺序通常很重要,但
-(min|max)depth n
开关会影响整体行为。


7
投票

您可以使用

-exec
basename
来做到这一点:

find ~/test -type d -exec basename {} \;

说明:

  • 正如您所知,
    find ~/test -type d
    部分递归地查找
    ~/test
    下的所有目录。
  • -exec basename {} \;
    部分在
    basename
    上运行
    {}
    命令,这是上一步的所有结果都被替换到的地方。

3
投票

那么你需要

-type f
而不是
-type d

或者,如果您想显示文件夹列表,不包括父文件夹

-mindepth 1
(
find ~/test -type d -mindepth 1
)。

既然你编辑了它,我想你想要的可能是

find ~/test -type d -mindepth 1 |cut -d/ -f3-

但我认为你需要更具体;-)


0
投票

(当前)我认为您不需要执行命令。

-printf
-maxdepth
可以替代
-exec basename
:

[...]$ find ~/test -mindepth 1 -type d -printf "/%P\n"
/test1

-1
投票

我刚刚用

sed

修复了它
find $BASE -type d \( ! -iname "." \)|sed s/$BASE//g

其中

$BASE
是初始文件夹名称。

© www.soinside.com 2019 - 2024. All rights reserved.