我想将文件存档在上述日期之上。我需要做两件事,
我有这样的示例文件
ABCSMOKLO2Y_pm24hr_20180410.000006_4.csv
11randomletters_6randomalphanumeric_YYYYMMDD.randomnumbers_randomnum.csv
我想根据文件名中的日期来tar文件。例如,如果我提到4月10日。每个日期文件都应该是特定日期的tar,就像这样。
20180410.tar.gz
20180409.tar.gz
20180408.tar.gz
如果特定日期没有可用文件。我不想为没有文件的日期创建一个tar文件。
function archive_old_files(){
d=$(date -d"$DAYS_TO_ARCHIVE days ago" +%s)
echo "$d"
for i in {1..30}; do
dt="$(date -d@$((d - i * 86400)) +%Y%m%d)"
fn="$dt.tar.gz"
if [ "$dt" -lt "$d" ] || [ -f *"$dt"* ]; then
tar -czf "$DEST_ARCHIVE"/$fn "$SRC_DIR_ARCHIVE"/*$dt*
fi
done
}
摘要:
如果在任何日期没有可用文件。我的脚本创建空date.tar.gz
。
答案 0 :(得分:0)
{1..30}
我根据shell globbing和你的描述的可能性限制了filepattern。
然后我收集数组中的文件并检查索引0处的第一个元素是否是文件。
顶部的文件/目录只是为了满足我的测试条件。
我真的不明白为什么你把日期计算成几秒钟。我仍然不明白为什么有变量DAYS_TO_ARCHIVE但在循环中有{1..$DAYS_TO_ARCHIVE}
。也许是因为for i in $(seq 1 $DAYS_TO_ARCHIVE)
不起作用,但是
for dt in 201802{01..31}
do
...
done
会奏效。我希望它能进一步帮助你。
如果你整个月都这样做并且在每个月的第一天由cron控制,我会考虑使用日期命令YYYYMM和 - 例如201802(每个月)生成
${#toarc[0]}
如果(不存在)日期的丢失文件得到完美处理。
测试toarc的数组大小
Counter
不起作用,因为如果没有找到文件,则数组包含filepattern作为文本文本。
我希望这会有所帮助。