我在不同的文件夹里遇到了困难,想要列出某个文件夹的内容,但又不包括该文件夹本身的名称。
例如:
root@vps [~]# find ~/test -type d
/root/test
/root/test/test1
然而,我希望它只显示/test1,就像例子一样。你有什么想法?
简单并没有错。
find ~/test -mindepth 1
同样,这将产生相同的效果:
find ~/test/*
它与~/test/
中包含的所有内容匹配,但不包括~/test
本身。
顺便提一下,你几乎可以肯定地发现,find
会抱怨-mindepth n
选项在任何其他开关之后,因为排序通常很重要,但-(min|max)depth n
开关影响整体行为。
-mindepth
是不错的选择,但不要使用通配符版本,因为如果超过最大命令参数大小,它可能会失败。 - Curt~/test/.env
,而“/*”则不会。请参见此处的示例https://dev59.com/oWYr5IYBdhLWcg3wn7gc#28809662。 - Chad von Nau-exec
和basename
来完成这个操作:find ~/test -type d -exec basename {} \;
说明:
find ~/test -type d
部分会递归查找 ~/test
下的所有目录,这一点你已经知道了。-exec basename {} \;
部分会在{}
位置,即上一步骤的结果中代替的部分上运行basename
命令。\;
为+
,代替使用xargs
。 - Peter如果你想要显示文件列表,而不是文件夹列表,则需要使用-type f
而非-type d
。
或者,如果你想要显示排除父文件夹后的文件夹列表,则可以使用-mindepth 1
(find ~/test -type d -mindepth 1
)。
现在看到你所编辑的内容,我认为你想要的可能是:
find ~/test -type d -mindepth 1 |cut -d/ -f3-
但我认为你需要更具体一些 ;-)
我刚用sed
修复了它。
find $BASE -type d \( ! -iname "." \)|sed s/$BASE//g
其中$BASE
是初始文件夹名称。
(cd ~/test && find *)
? - Jack Valmadre