繁体   English   中英

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

[英]How to find NOT open files with lsof

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

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

然后,在一个while循环中,我尝试使用lsof检查目录列表(父级和1级子目录)中是否未打开文件,但我完全不满意bash。 说我也许能够得到OPEN文件的列表,但这不是我所需要的。 任何想法都欢迎。

谢谢你的帮助-

干杯

更新:据我了解, awk可能会有所帮助。 也可能是caseshift

更新1:我现在才知道应该只为lsof调用一次(使用,调用,不确定哪个单词正确),这就是为什么while循环不是合适的解决方案的原因。 而且,我需要stdout 没有打开文件的目录列表,每个目录都放在单独的行中。 这并不难,我只是想弄清楚tsak是什么,所以就可以了。 问题是我不知道如何在没有while循环的情况下将目录列表重定向到lsof 像这样的东西无法按我想要的方式工作: file="path"; name=$(cat "$file") file="path"; name=$(cat "$file")

给定lsof返回的文件列表,您想从目录列表中删除dirlist并打印其余文件。

lsof +D . | grep -vFxf - dirlist

如果lsof将目录降级到更深的层次并找到不在dirlist中的dirlist ,则唯一的效果就是grep无法找到并删除这些文件,因此除了效率低下之外,这应该是无害的。

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

使用查找命令

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;完成” -检查文件是否没有其进程(这意味着未使用文件),然后打印此文件名

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM