如何仅从lsof获取文件名?

时间:2019-04-08 11:20:08

标签: linux bash unix

我想使用 lsof 在文件夹中创建打开文件的列表。我正在使用macOS,但了解这对于* nix很常见。

man lsof 中,-Fn选项似乎最接近我想要的选项,但是我无法走得更远。我正在管道削减到仅文件名。这是我正在使用的命令:

$ lsof -Fn dir1 | cut -c2-

我期待

dir1/file1.txt

我要

32783
34
dir1/file1.txt
32785
3
dir1/.DS_Store

2 个答案:

答案 0 :(得分:1)

您可以使用以下命令:

lsof your_dir | awk '{print $9}'

更新:

lsof your_dir | awk '{for(i=9;i<=NF;++i)print $i}'

这会将第9列打印到最后。

答案 1 :(得分:0)

请您尝试以下操作(因为没有发布任何样品,因此仅在我的测试框中进行了测试)。

lsof  | awk 'match($0,/\/([^ ])*|\/([^$])*/){print substr($0,RSTART,RLENGTH)}'


编辑: :由于OP不需要名称中带有DOT的文件(我认为基本上是隐藏的文件),因此可以尝试关注。

lsof  | 
awk '
FNR>1 && match($0,/\/.*/){
   val=substr($0,RSTART,RLENGTH)
   if(val !~ /\/\./){
     print val
   }
   val=""
}'