1

我有一个 bash 脚本,可以将我的 NAS 上的文件同步到以下目录:

mkdir /backup/folder_`date +%F`

我将如何编写一个清理脚本,根据目录名称中的日期删除超过 7 天的目录?

4

3 回答 3

0

使用要删除的模式创建文件夹列表,从列表中删除要保留的文件夹,删除其他所有内容。

于 2013-08-26T19:25:58.303 回答
0
#!/bin/bash

shopt -s extglob

OLD=$(exec date -d "now - 7 days" '+%s')

cd /backup || exit 1 ## If necessary.

while read DIR; do
    if read DATE < <(exec date -d "${DIR#*folder_}" '+%s') && [[ $DATE == +([[:digit:]]) && DATE -lt OLD ]]; then
        echo "Removing $DIR."  ## Just an example message. Or we could just exclude this and add -v option to rm.
        rm -ir "$DIR"  ## Change to -fr to skip confirmation.
    fi
done < <(exec find -maxdepth 1 -type d -name 'folder_*')

exit 0

我们实际上可以使用更谨慎的方法,例如,-rd $'\0'但我认为这次它们不是真的必要。-print0IFS=

于 2013-08-26T19:33:06.257 回答
0

一个简单的发现怎么样:

find /backup -name 'folder_*' -type d -ctime 7 -exec rm -rf {} \;

于 2013-08-26T20:33:59.173 回答