根据 linux 系统上压缩文件的年份和月份,使用文件名创建压缩存档

Create compressed archive with filename based on year and month of compressed files on linux system

我想压缩和存档(例如 zip 或 tar.gz)很多文件,这些文件都存储在 / 文件夹中。 它应该创建类似 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?

将 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 循环处理输出。将 date/time 标记提取到变量 dattim 中,并将文件路径提取到变量 filpath 中。使用这些变量生成将文件添加到日期 zip 文件的命令。

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