我有一个包含多个文件的目录(例如 /home/initialdirectory),其中包含:
C-2343.csv F-4455.csv G-4433.txt C-8788.csv
我想将上星期星期星期一0:00:00到星期日0:00:00之间修改过的所有.csv文件(以字符“C”开头)移动到另一个目录(例如 home/initialdirectory/backup)。我想在一个将在星期日0:00:00执行的cron中实现这个。
jmo0nnb31#
Using this good method for using findGetting dates is explained in this answerExpanding filenames in find command解释了将文件名传递到相当于shell脚本的内容的复杂性。下面的命令查找所有比上星期一新但不比星期日新的文件(可能是last-sunday),文件名必须以C开头并以.csv结尾,找到文件后,执行shell并将找到的路径作为参数1 $src传入,然后在$dst中将olddir替换为newdir。如果不存在dst目录,创建dst目录。将文件从olddir移动到newdir。
C
.csv
$src
$dst
olddir
newdir
gfind olddir \ -newermt "$(date -dlast-monday +%Y%m%d)" \ ! -newermt "$(gdate -dsunday +%Y%m%d)" \ -name C*\.csv \ -exec bash -c \ 'src=$1 && \ dst="${1/#olddir/newdir}" && \ [ -d $(dirname $dst) ] || \ mkdir -p $(dirname $dst) && \ mv $src $dst' \ bash \{\} \;
1条答案
按热度按时间jmo0nnb31#
Using this good method for using find
Getting dates is explained in this answer
Expanding filenames in find command解释了将文件名传递到相当于shell脚本的内容的复杂性。
下面的命令查找所有比上星期一新但不比星期日新的文件(可能是last-sunday),文件名必须以
C
开头并以.csv
结尾,找到文件后,执行shell并将找到的路径作为参数1$src
传入,然后在$dst
中将olddir
替换为newdir
。如果不存在dst目录,创建dst目录。将文件从olddir
移动到newdir
。