是否可以仅获取目录路径的 find 结果?使用带有某些选项的 find ,或者使用 grep 或其他一些实用程序将结果作为过滤器通过管道传输?
我以为类似的东西find | grep */$
可能会起作用,但事实并非如此。从我“搜索”具有特定名称的文件夹的其他一些测试来看,似乎我得到了命中,folder_name$
但没有命中folder_name/$
。这似乎违反直觉。如何 grep 查找以 结尾的行/
?
答案1
是的,该-type d
选项就是用于此目的的。
例如:
$ find /boot -type d
/boot
/boot/grub
/boot/grub/locale
/boot/grub/fonts
/boot/grub/i386-pc
这是手册页的相关部分:
-type c
File is of type c:
b block (buffered) special
c character (unbuffered) special
d directory
p named pipe (FIFO)
f regular file
l symbolic link; this is never true if the -L option or the
-follow option is in effect, unless the symbolic link is
broken. If you want to search for symbolic links when -L
is in effect, use -xtype.
s socket
D door (Solaris)
答案2
作为补充比雷埃夫斯零号的回答,如果您想包含解析为目录的符号链接:
使用 GNU 查找:
find . -xtype d
POSIXly:
find . -exec test -d {} \; -print
你可以优化到
find . \( -type d -o -type l -exec test -d {} \; \) -print
如果您想在下降目录树时跟踪符号链接,您可以这样做:
find -L . -type d
它将报告目录和目录的符号链接。如果您不想要符号链接:
使用 GNU 查找:
find -L . -xtype d
POSIXly:
find -L . -type d ! -exec test -L {} \; -print
和zsh
:
print -rC1 -- **/*(ND/) # directories
print -rC1 -- **/*(ND-/) # directories, or symlinks to directories
print -rC1 -- ***/*(ND/) # directories, traversing symlinks
print -rC1 -- ***/*(ND-/) # directories or symlinks to directories,
# traversing symlinks