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

2020 年 8 月 14 日
 rateltalk

我目前的脚本是:

#!/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 {} \;

这个,是可以成功的。。

求指点

2807 次点击
所在节点    Linux
6 条回复
Mohanson
2020 年 8 月 14 日
```
$ apt install tmpreaper
```
rateltalk
2020 年 8 月 14 日
@Mohanson 应该是数组定义和循环有问题,并不是删除语句不能成功。。
rateltalk
2020 年 8 月 14 日
找到问题了,循环那里应该这样写:
```
for dir in ${dirs[@]}; do
```
calmzhu
2020 年 8 月 14 日
数组遍历就不对

$ 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 年 8 月 14 日
find /home -mtime +7 -exec rm {} \\;
尝试后面多加一个反斜线
webs
2020 年 8 月 16 日
find 后面可以带多个目录

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

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

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

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

© 2021 V2EX