说,我有一个特定的任务来查找未打开的文件。我了解如何使用lsof(lsof +D
)获取打开文件的列表。此外,我只需要在所谓的第一级子目录中找到它们。为此,我使用find
命令和maxdepth 1
操作数。
find -maxdepth 1 -type d -ls >dirlist
然后,在一个while循环中我试图使用 lsof 来检查 NOT open 文件的目录列表(parental和1 level sub)但我完全是绿色到bash。说我可能能够得到一个OPEN文件列表,但它不是我需要的。任何想法都受到欢迎。
感谢您的帮助 -
欢呼声
根据我的理解,更新:awk
可能会有所帮助。也可以是case
和shift
?
更新1:我刚才想到我应该只为lsof
调用(使用,调用,不确定哪个词是正确的),这就是为什么我的{{ 1}}循环不是一个合适的解决方案。此外,我需要stdout一个包含没有打开文件的目录列表,每个目录都在一个单独的行中。这并不难,我有点工作,只是试图澄清什么是tsak。问题是我不知道如何在没有while
循环的情况下将目录列表重定向到lsof
。
像这样的smth不能按照我想要的方式工作:
while
答案 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;完成" - 检查文件是否没有进程(这意味着文件未被使用)然后打印此文件名