比如说,我有一个特定的任务来查找 的文件。未开 .我了解如何使用 lsof ( lsof +D
) 获取打开文件的列表。此外,我只需要在所谓的第一级子目录中找到它们。为此,我使用 find
带有 maxdepth 1
的命令操作数。
像这样:find -maxdepth 1 -type d -ls >dirlist
然后,在一个 while 循环中,我尝试使用 lsof 检查 的目录列表(父级和 1 级子级)未打开 文件,但我完全不喜欢 bash。假设我可能能够获得 OPEN 文件的列表,但这不是我需要的。欢迎任何想法。
谢谢你的帮助-
干杯
更新:awk
据我了解,可能会有所帮助。还有case
和 shift
也许?
更新 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/