我正在尝试创建一个 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
看起来您的命令正在匹配并删除父目录。
-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" \)