Distributions
› Ubuntu
› Fedora
› CentOS
中文资源站
› 网易开源镜像站
rateltalk
V2EX  ›  Linux

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

  •  
  •   rateltalk ·
    shangdev · Aug 14, 2020 · 3029 views
    This topic created in 2272 days ago, the information mentioned may be changed or developed.

    我目前的脚本是:

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

    这个,是可以成功的。。

    求指点

    Supplement 1  ·  Aug 14, 2020

    找到问题了,循环那里应该这样写:

    for dir in ${dirs[@]}; do
    

    $dirs 并不能获取到完整的数组。

    6 replies  •  2020-08-16 10:03:30 +08:00
    Mohanson
    Mohanson
    Aug 14, 2020
    1
    ```
    $ apt install tmpreaper
    ```
    rateltalk
    rateltalk
    OP
    Aug 14, 2020
    2
    @Mohanson 应该是数组定义和循环有问题,并不是删除语句不能成功。。
    rateltalk
    rateltalk
    OP
    Aug 14, 2020
    3
    找到问题了,循环那里应该这样写:
    ```
    for dir in ${dirs[@]}; do
    ```
    calmzhu
    calmzhu
    Aug 14, 2020
    4
    数组遍历就不对

    $ 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
    wangyzj
    Aug 14, 2020
    5
    find /home -mtime +7 -exec rm {} \\;
    尝试后面多加一个反斜线
    webs
    webs
    Aug 16, 2020
    6
    find 后面可以带多个目录
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5356 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:52 · PVG 09:52 · LAX 17:52 · JFK 20:52
    ♥ Do have faith in what you're doing.