gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:37:44 26 4
gpt4 key购买 nike

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

像这样:find -maxdepth 1 -type d -ls >dirlist
然后,在一个 while 循环中,我尝试使用 lsof 检查 的目录列表(父级和 1 级子级)未打开 文件,但我完全不喜欢 bash。假设我可能能够获得 OPEN 文件的列表,但这不是我需要的。欢迎任何想法。

谢谢你的帮助-

干杯

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

更新 1:我刚才发现我应该为 lsof 调用(使用,调用,不确定哪个词是正确的)只有一次,这就是为什么我的while循环不是一个合适的解决方案。此外,我需要标准输出具有 的目录列表。没有打开的文件 ,每一个都在一个单独的行中。这并不难,我有点工作,只是想弄清楚 tsak 是什么。问题是我不知道如何将目录列表重定向到 lsof没有 while环形。
像这样的东西不能按我想要的方式工作:file="path"; name=$(cat "$file")

最佳答案

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

lsof +D . | grep -vFxf - dirlist

如果 lsof将目录下移到更深的级别并查找不在 dirlist 中的文件,唯一的效果是 grep无法找到并删除那些,因此除了轻微的低效率之外,应该是无害的。
grep -F表示搜索表达式是精确的字符串,而不是正则表达式; -x说匹配需要是一整行; -v说要删除匹配项;和 -f -表示从标准输入中读取搜索模式。

关于bash - 如何使用 lsof 查找未打开的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47740675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com