【问题标题】:How to delete files that are not open?如何删除未打开的文件?
【发布时间】:2015-09-09 06:07:21
【问题描述】:

假设我的 Ubuntu-Linux 的一个目录中有三个文件。其中一个在音乐播放器中打开,另外两个在任何应用程序中未打开,也未在任何进程中使用。

我想删除这两个文件。换句话说,我想检测没有被任何进程使用的文件,然后删除它们。

我试过这个:

rm !(lsof | grep "thePath")

但它失败了。 lsof 这里有问题。

有什么办法吗?

【问题讨论】:

  • 你可能需要lsofgrep
  • 我试过这个:rm !(lsof | grep "thePath")。但它失败了。lsof 这里有问题。我该怎么办?
  • 你的任务是找到一个正在使用的文件,添加rm 很明显。我建议您在应用删除操作之前尝试找出您的系统如何做到这一点。我已经看到发布的讨论问题,但我目前无法测试它们。
  • 您应该在Unix & Linux Stack-Exchange 网站上发布此类问题。不在这里。

标签: linux ubuntu rm


【解决方案1】:

你的语法大错特错。在 shell 中,与许多其他编程语言不同,将命令(就像函数调用一样)放在括号中不会产生结果。

相反,你想要这样的东西:

for f in *; do
    fuser -s "$f" || rm "$f"
done

我更喜欢 fuser 而不是 lsof,因为它允许您查询单个文件。

【讨论】:

  • 也许在没有-s 的情况下运行fuser *,看看还有什么使文件保持打开状态?输出是一个 PID,您可以从 /procps 查找。
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 2016-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
相关资源
最近更新 更多