【发布时间】:2012-11-30 21:10:45
【问题描述】:
如何获取目录中的 .pid 文件的路径。 下面的代码只返回文件
root@linux [/]# ls -l $(find /* -name dovecot | grep var/run) | grep pid
-rw------- 1 root root 5 Nov 28 15:22 master.pid
【问题讨论】:
如何获取目录中的 .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 命令中缩小匹配范围。
【讨论】:
master.pid在目录dovecot中,var/run在某处的路径中。
/var/run,但原始搜索位于/* 下的所有(非隐藏)目录下,例如会找到/usr/adm/var/run/dovcote。
/.* 文件几乎不值得输入*)...
我想输出的解释一定是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
?
或者:
# readlink -f /var/run/dovecot/*.pid
/var/run/dovecot/master.pid
【讨论】: