如何使用lsof查找NOT打开的文件

时间:2017-12-10 16:07:31

标签: bash ubuntu lsof

说,我有一个特定的任务来查找未打开的文件。我了解如何使用lsof(lsof +D)获取打开文件的列表。此外,我只需要在所谓的第一级子目录中找到它们。为此,我使用find命令和maxdepth 1操作数。

像这样:find -maxdepth 1 -type d -ls >dirlist

然后,在一个while循环中我试图使用 lsof 来检查 NOT open 文件的目录列表(parental和1 level sub)但我完全是绿色到bash。说我可能能够得到一个OPEN文件列表,但它不是我需要的。任何想法都受到欢迎。

感谢您的帮助 -

欢呼声

根据我的理解,

更新:awk可能会有所帮助。也可以是caseshift

更新1:我刚才想到我应该只为lsof调用(使用,调用,不确定哪个词是正确的),这就是为什么我的{{ 1}}循环不是一个合适的解决方案。此外,我需要stdout一个包含没有打开文件的目录列表,每个目录都在一个单独的行中。这并不难,我有点工作,只是试图澄清什么是tsak。问题是我不知道如何在没有while循环的情况下将目录列表重定向到lsof。 像这样的smth不能按照我想要的方式工作: while

2 个答案:

答案 0 :(得分:2)

鉴于lsof返回的文件列表,您要从dirlist中删除这些文件并打印其余文件。

lsof +D . | grep -vFxf - dirlist

如果lsof将目录降级到更深层次并查找不在dirlist中的文件,则grep无法找到并删除这些文件的唯一影响是,所以除了小的低效率,应该是无害的。

grep -F表示搜索表达式是精确的字符串,而不是正则表达式; -x说匹配需要整整一行; -v表示删除匹配项;并-f -表示从标准输入中读取搜索模式。

答案 1 :(得分:1)

使用查找命令

find -maxdepth 1 -type f | while read myfile ; do fuser -s $myfile || echo $myfile ; done

"找到-maxdepth 1-type f" - 查找 -maxdepth 1 目录中的所有文件
"读取myfile时;做fuser -s $ myfile || echo $ myfile;完成" - 检查文件是否没有进程(这意味着文件未被使用)然后打印此文件名