我有一个bash脚本将rsyncs文件存入我的NAS到下面的目录:
mkdir /backup/folder_`date +%F`
我如何编写一个清理脚本,根据目录名称中的日期删除7天以前的目录?
答案 0 :(得分:0)
使用您要删除的模式创建文件夹列表,从列表中删除要保留的文件夹,删除其他所有文件夹。
答案 1 :(得分: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'
,-print0
和IFS=
,但我认为这次不是必需的。
答案 2 :(得分:0)
简单的查找怎么样:
find /backup -name 'folder_*' -type d -ctime 7 -exec rm -rf {} \;