【问题标题】:BASH Script to Remove old files, and create a text file containing the count and size of total files deleted.删除旧文件的 BASH 脚本,并创建一个包含已删除文件总数和大小的文本文件。
【发布时间】:2016-11-22 16:59:09
【问题描述】:

我是一名实习生,我的任务是创建一个 BASH 脚本来删除目录中超过 60 天的文件,然后导出一个包含已删除文件数量和已删除数据量的文本文件。我仍在尝试学习 BASH,并且有一个可以删除超过 30 天的文件;

    `find $DIR -type f -mtime -60 -exec rm -rf {}\;`

我仍在积极尝试学习 BASH,因此非常感谢任何回复的额外注释!

附:我找到了 Bash Academy ,但看起来该站点不完整,任何在我学习 bash 的过程中进一步阅读的建议也将不胜感激!

【问题讨论】:

    标签: linux bash shell memory memory-management


    【解决方案1】:

    我会使用以下脚本,例如 deleter.sh

    #!/bin/bash
    myfunc()
    {
      local totalsize=0
      echo " Removing files listed below "
      echo "${@}"
      sizes=( $(stat --format=%s "${@}") ) #storing sizes in an array.
      for i in "${sizes[@]}"
      do
      (( totalsize += i )) #calculating total size.
      done
      echo "Total space to be freed : $totalsize bytes"
      rm "${@}"
      if [ $? -eq 0 ]  #$? is the return value
        then
      echo "All files deleted"
      else
        echo "Some files couldn't be deleted"
      fi
    }
    export -f myfunc
    find "$1" -type f -not -name "*deleter.sh" -mtime +60\
    -exec bash -c 'myfunc "$@"' _ {} +
    # -not -name "*deleter.sh" to prevent self deletion
    # Note -mtime +60 for files older than 60 days.
    

    chmod +x ./deleter.sh
    

    然后运行它

    ./deleter '/path/to/your/directory'
    

    参考文献

    1. 查找[ manpage ] 了解更多信息。
    2. stat --format=%s 给出我们存储在数组中的字节大小。请参阅 [ stat ] 联机帮助页。

    感谢反馈

    【讨论】:

    • 不错 :) 值得一提的是 {} + 与 find 构建命令行
    • 谢谢@sjsam,这太棒了,比我之前的工作要干净得多,如果你可能感兴趣的话,这是我想出的; #!/bin/bash date=$(date +%F) #创建一个带有 find 命令输出的文本文件。 find -type f -mtime -60 > /tmp/$date.text cp /tmp/$date.text /root #读取 $date 文件,并删除其中列出的文件。 xargs -a /tmp/$date.text -d'\n' rm
    • 你的更干净,不会像我的那样创建文件。我有很多东西要学!另外,@mona_sax 感谢您提供的信息!
    猜你喜欢
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    相关资源
    最近更新 更多