使用 find 排除文件夹删除空文件

使用 find 排除文件夹删除空文件

我通常使用以下命令通过 find 删除主目录中的空文件和文件夹:

find /home/tjuh -empty -delete

不过我想排除一个文件夹,即/home/tjuh/.local/share/Steam/steamapps/common/所以我尝试了:

find . -not -path '/home/tjuh/.local/share/Steam/steamapps/common/' -empty

查看该特定文件夹是否被排除在搜索之外,但它并没有真正按照我想要的方式工作。

有什么建议么?

答案1

参数-path是一个模式,所以你必须使用通配符,否则它只会完全匹配:

find . -not -path "./.local/share/Steam/steamapps/common/*" -empty

另外,您必须使用绝对路径或相对路径,而不是混合使用它们。上面的是相对路径,下面的是绝对路径:

find /home/tjuh -not -path "/home/tjuh/.local/share/Steam/steamapps/common/*" -empty

答案2

如果你想排除该目录及其所有后代,那么这-prune就是您所需要的:

find "$HOME" -path "$HOME/.local/share/Steam/steamapps/common" -prune -o -empty -delete

这意味着:如果路径匹配$HOME/.local/share/Steam/steamapps/commonthen -prune(忽略它及其子级)并继续,或者 if -emptythen -delete(并继续)。

答案3

尝试:

rm `find /home/tjuh -empty | grep -v "^/home/tjuh/.local/share/Steam/steamapps/common/"`

相关内容