如何删除未打开的文件?

How to delete files that are not open?

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

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

我试过这个:

rm !(lsof | grep "thePath")

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

有什么办法吗?

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

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

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

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