我想只显示安装二进制文件的目录。像
/bin
的
/bin/ls
这是我到目前为止所做的:
ps aux | awk '{print $11}' | grep -x -e "/.*"
但是它也显示了文件名,我不想要那个,以及输出的例子:
/ usr / lib中/火狐/火狐
但我喜欢这样:
/ usr / lib中/火狐
谢谢!
答案 0 :(得分:2)
用于提取目录名称的命令是dirname "path/to/file"
。现在你可能已经看到,它需要一个参数(不从stdin读取)。但是,您可以使用xargs
来解决此问题:
xargs dirname
现在您只需要在管道的末尾添加它:
ps aux | awk '{print $11}' | grep -x -e "/.*" | xargs dirname
<强>演示强>
在我的Linux机器上运行:
$ ps aux | awk '{print $11}' | grep -x -e "/.*" | xargs dirname | head
/sbin
/lib/systemd
/lib/systemd
/sbin
/usr/sbin
/usr/sbin
/usr/sbin
/usr/sbin
/usr/sbin
/usr/bin
为了使命令对空间安全(@ hek2mgl的注释),您可以使用:
ps aux | awk '{print $11}' | grep -x -e "/.*" | xargs -I file dirname "file"
请注意,这会对性能产生影响:使用xargs dirname
而不使用任何标志会使用dirname
处理多个参数的循环机制,从而导致紧密循环,使用后者将会产生每行的<{1}}进程。
你的程序使用了大量的文本处理,这可能很棘手,容易出错,并且对格式(dirname
,...)的更改更敏感。一种不易出错的方式可以是:
ps