Bash 使用find获取文件路径,但不提供文件名

Bash 使用find获取文件路径,但不提供文件名,bash,find,command,Bash,Find,Command,如何获取目录中的.pid文件的路径。 下面的代码只返回文件 root@linux [/]# ls -l $(find /* -name dovecot | grep var/run) | grep pid -rw------- 1 root root 5 Nov 28 15:22 master.pid 我猜这就是你要找的: find /var/run -name "*.pid" 2>/dev/null | grep dovecot | xargs ls -l 在过滤器表达

如何获取目录中的.pid文件的路径。 下面的代码只返回文件

root@linux [/]# ls -l $(find /* -name dovecot | grep var/run) | grep pid
-rw-------  1 root root       5 Nov 28 15:22 master.pid

我猜这就是你要找的:

find /var/run -name "*.pid" 2>/dev/null | grep dovecot | xargs ls -l

在过滤器表达式中指定(部分)路径时,还可以在grep命令中缩小匹配范围

我认为输出的解释必须是
find
命令查找目录名,例如:

/var/run/dovecot
然后在目录上执行一个
ls-l
,它列出了目录中的文件,没有任何指向它的路径。您需要的是找到一种可靠的方法来列出目录中的文件及其完整路径名

一个方法——我认为不是一个好方法——是:

find $(find /* -name dovecot -type d | grep var/run) -type f -name '*.pid' \
     -exec ls -l {} +
这将使用您的第一个
find
命令获取您感兴趣的目录,然后再次运行
find
以查找
.pid
文件并在其上执行
ls-l
+
表示法意味着
find
的行为有点像
xargs
,将大量文件名聚集到一个
ls-l
运行中

cat /var/run/dovecot/master.pid
?

或:


以前找到的文件名是
master.pid
,位于路径某处的
dovecot
目录下,路径是
var/run
。啊,好吧,搞错了。我改变了建议。这样更好?更好。很可能是
/var/run
,但是最初的搜索是在
/*
下的所有(非隐藏)目录下进行的,并且会找到
/usr/adm/var/run/dovcote
作为一个例子。好的,当然可以搜索整个文件系统。只需缩短find命令中的路径。但你不想这么做,是吗?这将花费很长时间,并造成巨大的磁盘负载…我不想搜索整个系统-但OP做到了。有理由指出,这可能是一个非常昂贵的搜索(避免搜索
/.*
文件几乎不值得键入
*
)。。。
# readlink -f /var/run/dovecot/*.pid
/var/run/dovecot/master.pid