我用 2 个过滤器删除旧数据的 cronjob 无法匹配其中 1 个过滤器

问题描述 投票:0回答:1

我正在尝试创建一个 cronjob 来删除旧目录(以及其中的所有内容),但跳过整个目录和任何以 .save 结尾的目录。我尝试了以下各种 find/rm 作业,但它删除了 .save 目录。 它确实使 blist/ 目录完好无损。 我使用过!,-not,-prune,有或没有-深度,颠倒了blist和.save的顺序,在“.save”之前用-path替换了-name,等等... Ubuntu 24.04

我正在测试,所以我现在只是寻找任何超过 1 分钟的内容。

find test_dir/store/tmp/ -depth -type d \( ! -name "*.save" -o ! -path test_dir/store/tmp/blist \) -mmin +1 -exec rm -rf {} 2>/dev/null \;

仅关注 *.save 部分,以下命令将找到我期望的所有 *.save 目录。

usr@dev9:~$ find test_dir/store/tmp/ -type d \( -name "*.save" \) -mmin +1
test_dir/store/tmp/proj3/NX3.save

但是此命令会删除所有超过 1 分钟的内容,包括所有 *.save 目录。使用“-not”代替“!”行为相同。

usr@dev9:~$ ls -l test_dir/store/tmp/proj3/
total 20
drwxrwxr-x 3 usr usr 4096 Nov 20 08:51 NX1
drwxrwxr-x 3 usr usr 4096 Nov 20 08:51 NX2
drwxrwxr-x 3 usr usr 4096 Nov 20 08:51 NX3
drwxrwxr-x 3 usr usr 4096 Nov 20 08:51 NX3.save
drwxrwxr-x 3 usr usr 4096 Nov 20 08:51 NX4
usr@dev9:~$ find test_dir/store/tmp/ -type d \( ! -name "*.save" \) -mmin +1  -exec rm -rf {} 2>/dev/null \;
usr@dev9:~$ ls -l test_dir/store/tmp/proj3/
ls: cannot access 'test_dir/store/tmp/proj3/': No such file or directory

如有任何帮助,我们将不胜感激。

这是我的目录结构的摘要。

test_dir
└── store
    └── tmp
        ├── blist
        ├── proj1
        ├── proj2
        └── proj3
            ├── NX1
            │   └── bdata
            ├── NX2
            │   └── bdata
            ├── NX3
            │   └── bdata
            ├── NX3.save
            │   └── bdata
            └── NX4
                └── bdata
bash cron find ubuntu-24.04
1个回答
0
投票

看起来您的命令正在匹配并删除父目录。

-mindepth
可能就是您正在寻找的旗帜。来自 man find

       -mindepth levels
          Do not apply any tests or actions at levels less than
          levels (a non-negative integer).  Using -mindepth 1 means
          process all files except the starting-points.

复制你的目录结构我使用了这个命令,我认为它会给你你正在寻找的结果(或接近它)。

find test_dir/store/tmp/ -mindepth 3 -type d \( -name "*.save" \)

© www.soinside.com 2019 - 2024. All rights reserved.