【问题标题】:bash script to remove date folders by folder namebash脚本按文件夹名称删除日期文件夹
【发布时间】:2012-07-12 09:31:18
【问题描述】:

我有一个脚本,可以在当前日期之前在备份文件夹中创建文件夹。该脚本每天通过 cron 运行一次。

有没有办法通过文件夹名称删除超过 3 天的文件夹?像

日期 -3 ?

有效的脚本:感谢 Jo So。此脚本按日期创建文件夹。压缩文件进行备份,将它们粘贴到您的备份目录中并清除超过 3 天的备份 :-)

    #!/bin/bash

    cd /home/backups

    mkdir $(date +%Y-%m-%d)

    cd /opt/

    tar -pczf /home/backups/$(date +%Y-%m-%d)/opt.tar.gz code

    cd /var/

    tar -pczf /home/backups/$(date +%Y-%m-%d)/var.tar.gz work

cd /home/backups/
threedaysago=`date -d "3 days ago" +%Y%m%d`

for backup in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
do
    backupdate=`echo "$backup" | tr -d -`   # remove dashes

    if test "$backupdate" -lt "$threedaysago"
    then
        rm -rf "$backup"
    fi
done

【问题讨论】:

    标签: bash


    【解决方案1】:
    threedaysago=`date -d "3 days ago" +%Y%m%d`
    
    for backup in [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]
    do
        backupdate=`echo "$backup" | tr -d -`   # remove dashes
    
        if test "$backupdate" -lt "$threedaysago"
        then
            rm -rf "$backup"
        fi
    done
    

    独立于 mtime 工作,我可以告诉你,它不会在特别奇怪的极端情况下崩溃;-)

    【讨论】:

    • 这太棒了。谢谢你。这很好用。如果有人希望使用它,我已经修改了上面的脚本。
    【解决方案2】:

    删除超过 3 天的每日备份(“常规文件”类型):

    rm -f `find $YOUR_BACKUP_DIR -maxdepth 1 -type f -mtime +3`
    

    来自find 手册页:

       -mtime n
              File's data was last modified n*24 hours ago.  See the  comments
              for -atime to understand how rounding affects the interpretation
              of file modification times.
    

    【讨论】:

    • 感谢您的及时回复。有没有办法做到不使用修改日期,而是使用文件夹名称,因为文件夹是按日期命名的?
    • 您是否会修改已创建备份的文件夹?
    • 当目录包含具有奇怪文件名的文件时,您的脚本将中断并删除任意文件。另外,依赖 mtime 非常很脆弱,我不建议这样做。
    • 如果您详细说明“奇怪的文件名”并更详细地描述弱点,我会同意您的看法。我并不是说这是最好的解决方案,但文件名的格式是完全已知的,因为您在备份脚本中定义了它们。
    • 问题是你find ... 会返回所有文件。攻击者或事故可能会插入一个名为 "name_of_a_file_you_want_to_keep<whitespace>name_of_another_file_you_want_to_keep<whitespace>..." 的文件。然后rm -f 将愉快地删除所有文件名在原始文件名中的文件,因为它不知道它们实际上来自单个文件名,而是被 shell 拆分为多个文件名。
    猜你喜欢
    • 2018-01-23
    • 2021-07-17
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多