请教:如何遍历指定目录,删除指定天数以上的文件?

2020-08-14 14:56:09 +08:00
 s609926202

我目前的脚本是:

#!/bin/bash
#---------------------
# OPTIONS
#----------------------

DAYS_TO_KEEP=30

# 待删除目录
dirs[0]="/home/wwwroot/dir1"
dirs[1]="/home/wwwroot/dir2"

# 遍历
for dir in $dirs; do
  if [ "$DAYS_TO_KEEP" -gt 0 ] ; then
    echo "Deleting file older than $DAYS_TO_KEEP days"
    find $dir/* -mtime +$DAYS_TO_KEEP -exec rm {} \;
  fi
done

但是运行后并没有执行成功,也没报错什么的,,,如果单单运行:

find $dir/* -mtime +$DAYS_TO_KEEP -exec rm {} \;

这个,是可以成功的。。

求指点

1953 次点击
所在节点    Linux
6 条回复
Mohanson
2020-08-14 15:00:30 +08:00
```
$ apt install tmpreaper
```
s609926202
2020-08-14 15:10:01 +08:00
@Mohanson 应该是数组定义和循环有问题,并不是删除语句不能成功。。
s609926202
2020-08-14 15:20:03 +08:00
找到问题了,循环那里应该这样写:
```
for dir in ${dirs[@]}; do
```
calmzhu
2020-08-14 15:23:24 +08:00
数组遍历就不对

$ dirs[0]="/home/wwwroot/dir1"
$ dirs[1]="/home/wwwroot/dir2"
$ echo $dirs
/home/wwwroot/dir1

$ echo ${dirs[*]}
/home/wwwroot/dir1 /home/wwwroot/dir2

然后可以直接遍历的
for dir in dir1 dir2 dir3
do
wangyzj
2020-08-14 15:23:38 +08:00
find /home -mtime +7 -exec rm {} \\;
尝试后面多加一个反斜线
webs
2020-08-16 10:03:30 +08:00
find 后面可以带多个目录

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/698259

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX