仅删除最大深度为 2 及以上的子目录

仅删除最大深度为 2 及以上的子目录

我有一个包含 6 个子目录的目录,但我只想删除其中 3 个子目录,因此我在这 3 个目录中使用了 for 循环来“cd”,但我想删除深度为 2 的子目录(最大深度、最小深度为 2) 3个子目录内。我在 base 使用 find 命令(base 是 3 个子目录之一),但它会从深度 1 找到目录(这是预期的)

我的文件结构是 /a/b/c/d/e (a是我正在迭代的3个目录之一)

下面是我需要帮助/指导的代码的一部分 - find /a -mindepth 2 -maxdepth 2 -type d -mtime +30

这将输出 - ./b/c

所以我这样做不是希望删除目录/b并仅删除目录c和下面/内部深度

有没有办法做到这一点,或者我必须 cd 到该b目录?

答案1

您可以修改命令以rm -rf在找到的目录上执行 a,但您应该非常小心因为它可能导致数据丢失。操作方法如下:

find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec rm -rf {} \;

与往常一样,您应该首先测试该命令echo

find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec echo "Deleting: {}" \;

这将打印要删除的目录,允许您在实际删除任何内容之前验证命令的行为。

编辑:您正在寻找类似的东西吗?下面的命令不是破坏性的。

find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec sh -c 'cd "{}" && echo "Deleting contents of $(pwd)"' \;

这个命令具有破坏性!

find /a -mindepth 2 -maxdepth 2 -type d -mtime +30 -exec sh -c 'cd "{}" && rm -rf *' \;

答案2

免责声明:我是 rawhide (rh) 的当前作者(请参阅https://github.com/raforg/rawhide

您好,使用 rawhide (rh),您可以执行以下操作:

rh -m2 -M2 -x 'rm -r %s' /a 'd && old(30*days)'

首先要检查:

rh -m2 -M2 -x 'echo rm -r %s' /a 'd && old(30*days)'

-m2是相同的-mindepth 2

-M2是相同的-maxdepth 2

-x ...在每次匹配时执行给​​定的 shell 命令。

%s被匹配的文件路径替换(如 find 的{})。

/a是一个搜索路径。

'd && old(30*days)'匹配至少 30 天(或)d内未修改(添加或删除条目)的目录( )。old(30*days)old(month)

注意:检查mtime目录的 只考虑每个目录自己的mtime,而不考虑mtime其任何内容的 。也是如此find

答案3

感谢大家提供有用的意见,我能够在我的个人计算机上复制我的问题/问题。

我能够使用以下命令解决我的问题 - 一些代码... base2=$(pwd)即,/a find $base2 -mindepth 2 -maxdepth 2 -type d -mtime +30 | xargs rm -R 这将输出/a/b/c,但是按照指定,它将仅删除深度为 2 的目录,即/c 命令运行后,我们将/a/b按照我的要求进行操作。

相关内容