如何用shell脚本指定一个时间,然后从指定的目录(包括其子目录)中获取该时间点之后的文件复制到另一目录中
执行命令
backup.sh /var/www/html /opt/backup 20220609
backup.sh文件如下
#!/bin/sh
show_usage() {
echo "Usage: backup.sh src_folder bak_folder bak_date"
echo ""
echo "src_folder - source folder to backup"
echo "bak_folder - backup folder"
echo "bak_date - backup date in YYYYMMDD format"
}
if [ $# -ne 3 ]; then
show_usage
exit 1
fi
src_folder="$1"
bak_folder="$2"
bak_date="$3"
bak_file="$bak_folder/backup.tar"
if [ -f $bak_file ]; then
rm $bak_file
fi
tmpfile="`mktemp`"
touch -t ${bak_date}0000 $tmpfile
cd $src_folder
find . -name "*.py" -newer $tmpfile -exec tar rvf $bak_file {} \;
rm $tmpfile
echo "backup file: $bak_file"
ls -l $bak_file
#!/bin/sh
#BEGIN
files=`find ./ -type f -newermt '2001-01-01 00:00:00' ! -newermt '2019-01-01 00:00:00'`
for i in $files
do
#-f指的时文件,-d则代表目录
if [ -f $i ];then
echo $i >> grepfiles.txt
fi
done
#END
该程序将会获得该目录下忽略子目录(以2开头的目录)的所有2001-01-01 00:00:00到2019-01-01 00:00:00的所有文件,并输入到grepfiles.txt的文件中
有点矛盾,正在执行的脚本获取当前时间之后的文件.....,当它执行的时候,时间必然是当前时间,怎么可能有当前时间之后的文件呢?
如果要做文件备份的话,建议用crontab + rsync 备份文件,简单有效,rsync也就一条命令的事,crontab 将该命令定时执行就可以了
DATE=`date -d yesterday +%Y_%m_%d`
echo $DATE
2022_06_09
DATE=`date -d '1 month ago' +%Y_%m_%d`
echo $DATE
2022_06_09