命令从递归匹配名称的文件夹中删除所有文件?

命令从递归匹配名称的文件夹中删除所有文件?

我有我的基准文件夹(我们称之为基准)。

我里面有一堆文件夹,这些文件夹内的各个深度分散着缓存文件夹。

我想删除缓存文件夹中的所有文件,但不删除文件夹本身。

我努力了

cd base
#then one of...
sudo rm -rf cache/*
sudo rm -rf *cache/*
sudo rm -rf cache*/*
sudo rm -rf *cache*/*

但实际上我只是猜测,正确的命令是什么?

答案1

在 bash 中,你可以启用 globstar 并使用它**以递归方式匹配目录

shopt -s globstar
echo rm -rf ./**/*cache*/*

模式匹配

答案2

cache这将从文件夹 开始递归删除名为 的文件夹中的所有文件basecache文件夹本身仍将保持完整,但每个文件夹内的所有文件都将被删除。

find base -ipath "*/cache/*" -type f -delete

答案3

您可以使用极其强大的查找命令。

我会使用这样的东西:

find . -iname *cache* -ok rm -rf {} \;

现在让我来为你解释一下。Find 是应用程序的名称,它有很多选项,但对你来说,你不需要很多。

意思.是查看当前目录。这意味着你必须在正确的目录中开始。我假设你~

-iname意味着搜索我的不区分大小写的名字。

*cache*表示名称必须包含cache。

现在下一部分很重要。

-ok表示执行后面的命令,但像我一样,如果我想先执行它。这可以替换为,-exec但我不建议这样做。这会在不通知您的情况下删除内容,您不希望这样。

好的,下一行(运行的内容-ok)是rm -rf {} \;

rm -rf希望 是不言自明的。{}基本上是它找到的文件名称的占位符。\;末尾的 只是表示它是该行的结尾。

我希望这是有道理的。

我建议运行 find 命令时不要添加 和-ok。它会先列出所有缓存文件,然后您可以查看它们。然后添加部分-ok并开始操作!

答案4

只需将 basedir 替换为您要删除的基本目录的路径即可

$ find basedir -type f -delete

如果您觉得先移动到基本目录更舒服,那么:

$ cd basedir
$ find . -type f -delete

相关内容