我有一个 bash 脚本,生成以下格式的 csv 文件:
056_log_202312290735.csv
056_log_202312290736.csv
067_dat_202312290737.csv
067_dat_202312290838.csv
056_log_202312290951.csv
067_dat_202312290952.csv
056_log_202312290953.csv
...
056_log_YYYYmmddHHMM.csv
067_dat_YYYYmmddHHMM.csv
其中YYYYmmddHHMM
是 csv 文件本身包含的数据的时间戳,而不是 csv 文件的创建时间。
所以我想编写一个bash脚本来比较当前系统时间(格式与csv文件相同,即YYYYmmddHHMM
)与文件名上的时间戳,
如果两者之间的差异大于或等于 120 分钟,则必须将文件移至old_data
目录。
如果两者之间的差异小于 120 分钟,则必须将文件移动到current_data
目录
使用当前系统时间 202312291048,必须按如下方式移动文件:
~/old_data/
056_log_202312290735.csv
056_log_202312290736.csv
067_dat_202312290737.csv
067_dat_202312290838.csv
~/current_data/
056_log_202312290951.csv
067_dat_202312290952.csv
056_log_202312290953.csv
到目前为止,我知道我可以使用我想要的格式获取当前时间:
CUR_TIME="`date +%Y%m%d%H%M`";
并使用以下命令从 csv 文件获取时间戳:
ls 056*.csv | cut -d'_' -f 3 | cut -c -12; #get timestamps from 056 files
ls 067*.csv | cut -d'_' -f 3 | cut -c -12; #get timestamps from 067 files
从那时起,我不知道如何继续前进..请帮助。
这就是我能想到的:
#!/bin/bash
CUR_TIME=$(date +%Y%m%d%H%M);
for csvfile in *.csv
do
TIME_DIFF=0
TIMESTAMP= $(echo $csvfile | cut -d'_' -f 3 | cut -c -12)
TIME_DIFF= $CUR_TIME-$TIMESTAMP
if $TIME_DIFF >= 120
then
mv -f $csvfile ~/old_data/
else
mv -f $csvfile ~/current_data/
fi
done