首页 > 解决方案 > 在linux系统上根据压缩文件的年份和月份创建带有文件名的压缩存档

问题描述

我想压缩和归档(例如 zip 或 tar.gz)很多文件,这些文件都存储在 /folder 中。它应该创建像 yyyy-mm-backup.zip 这样的存档文件,包括在该时间范围内修改的所有原始文件。

示例文件:

fileA.txt (modified date 2020-12-01)
fileB.txt (modified date 2020-12-02)
fileC.txt (modified date 2021-01-01)

应该创建存档文件:

2020-12-backup.zip (include fileA.txt and fileB.txt)
2021-01-backup.zip (include fileC.txt)

这可以通过单个 zip 或 tar 命令实现吗?还是我需要一个脚本或使用 logrotate?

标签: linuxzipbackup

解决方案


将 find 命令的输出重定向到 while 循环

 while read line;
 do 
   dattim=${line%%/*};
   filpath=${line#*/};
   echo "zip -r $dattim-backup.zip $filpath";
   # zip -r "$dattim-backup.zip" "$filpath"
 done <<< "$(find /path/to/directory -name "*.txt" -printf "%TY-%Tm/%h/%f\n")"

查找所有扩展名为 txt 的文件,并以“/”、前导目录、“/”和文件名列出的格式打印修改日期。通过 while 循环处理输出。将日期/时间戳提取到变量 dattim 中,将文件路径提取到变量 filpath 中。使用这些变量生成命令以将文件添加到过时的 zip 文件中。

验证 echo 是否按预期显示命令,然后删除注释标志以执行实际的 zip 命令。


推荐阅读