我有一个如下所示的文件列表:
...
live-2014-04-28.tar.bz2
live-2014-04-29.tar.bz2
live-2014-04-30.tar.bz2
live-2014-05-01.tar.bz2
live-2014-05-01.tar.bz2
live-2014-05-02.tar.bz2
...
...并尝试使用bash脚本删除一周以前的文件:
c=0
for i in `echo "ls /filebackup/daily" | sftp somepath.your-backup.de`
do
c=`expr $c + 1`
[ $c -le 3 ] && continue
d=`echo $i | sed -r 's/[^0-9]*([0-9]+-[0-9]+-[0-9]+).*/\1/'`
d=`date -d $d +'%s'`
echo $c
if [ `expr $dc - 691200` -ge $d ]
then
echo 'here file will be deleted'
fi
done
我无法进入echo 'here file will be deleted'
,正在尝试调试 - 不太确定$dc
部分的作用(我非常喜欢使用bash编码)。
我使用this article中的代码(请参阅文件备份脚本部分),并试图了解它为什么不能在我这边工作。
感谢您的帮助。
答案 0 :(得分:2)
这是一种做法。
#!/bin/bash
# Get the current and store in a variable
currDate=$(date +'%Y%m%d')
# set this shell option to prevent literal match when no files exists
shopt -s nullglob
# Iterate over your directory
for file in *.bz2; do
f=${file%%.*} # Strip the trailing extensions => live-2014-04-28
f=${f#*-} # Strip the leading hyphen => 2014-04-28
f=${f//-/} # Substitute all hyphens in date => 20140428
if (( f <= (currDate - 7) )); then # If the date is less than week old
echo rm $file ... # delete it
fi
done
我已将echo
放在rm
命令之前,以便您可以测试输出。如果您对结果感到满意,则可以删除echo
。
答案 1 :(得分:1)
使用bash脚本来删除早于一周的文件。
如果忽略文件的名称并使用时间戳,该怎么办?
$ find . -name "live-*.tar.bz2" -mtime +7 -delete
这不完全是你想要的,但它很简单。