我有一个基础文件夹(我们称之为base)。
我有很多子文件夹,散落在不同的深度中,这些子文件夹中还有缓存文件夹。
我想删除缓存文件夹中的所有文件,但不删除文件夹本身。
我已经尝试过
cd base
#then one of...
sudo rm -rf cache/*
sudo rm -rf *cache/*
sudo rm -rf cache*/*
sudo rm -rf *cache*/*
但实际上我只是在猜测,什么才是正确的命令?
我有一个基础文件夹(我们称之为base)。
我有很多子文件夹,散落在不同的深度中,这些子文件夹中还有缓存文件夹。
我想删除缓存文件夹中的所有文件,但不删除文件夹本身。
我已经尝试过
cd base
#then one of...
sudo rm -rf cache/*
sudo rm -rf *cache/*
sudo rm -rf cache*/*
sudo rm -rf *cache*/*
cache
的文件夹中的所有文件,从base
文件夹开始。这些cache
文件夹本身将保持完好,但其中的所有文件将被删除。find base -ipath "*/cache/*" -type f -delete
find . -iname *cache* -ok rm -rf {} \;
现在让我为您解释一下。Find是该应用程序的名称,它有很多选项,但对于您来说,您不需要其中很多。
.
表示在当前目录中查找。这意味着您必须先进入正确的目录。我假设对于您来说,那就是~
。
-iname
表示按照不区分大小写的名称进行搜索。
*cache*
表示名称必须包含cache。
接下来的部分很重要。
-ok
表示执行后面的命令,但会先询问我是否要执行。这可以替换为-exec
,但我不建议这样做。那样会删除文件而不告诉您,您不想要那样。
好的,下一行(也就是-ok
运行的内容)是rm -rf {} \;
rm -rf
我希望是不言自明的。 {}
基本上是该命令找到的文件名称的占位符。末尾的\;
表示行的结束。
希望这样讲清楚了。
我建议运行不包括-ok
及其右侧的所有内容的查找命令。它会首先列出所有缓存文件的列表,您可以进行审查。然后再添加-ok
部分并开始操作!-iname
的模式,如果当前目录中恰好有与该模式匹配的文件,那么这将导致错误。此外,这种方法还会删除缓存目录,而不仅仅是其中的内容。 - geirha只需将basedir替换为您想要删除的基目录的路径
$ find basedir -type f -delete
$ cd basedir
$ find . -type f -delete