unix 我如何移动所有csv文件从特定字符开始,并在特定的一周修改到另一个路径?

d7v8vwbk  于 2022-11-04  发布在  Unix
关注(0)|答案(1)|浏览(148)

我有一个包含多个文件的目录(例如 /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中实现这个。

jmo0nnb3

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

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 \{\} \;

相关问题