【问题标题】:compress only new files without zipping again the old ones changing their timestamp仅压缩新文件而不再次压缩旧文件更改其时间戳
【发布时间】:2020-10-06 10:12:15
【问题描述】:

场景: 在文件夹 1 上: 我们有 file1.repo file2.repo file3.repo 在我运行这个命令之后:

/usr/bin/find $folder/*.repo -print -exec sh -c "gzip < {} > {}.gz" \;

它将所有文件压缩为 file1.repo.gz ,file2.repo.gz, file3.repo.gz

我的问题是我如何防止在运行多次命令后再次压缩相同的文件并且只压缩文件夹中添加的新文件,(命令再次创建文件 {1,2,3}.repo.gz 不同时间戳并将原始文件{1,2,3}.repo 也保留在文件夹中)

我需要的是只压缩文件夹中添加的新文件,而无需再次压缩更改时间戳的旧文件

【问题讨论】:

  • 如果你可以假设,以.gz 结尾的文件被压缩,你可以告诉 find 排除这些文件。当然,如果您手动创建一个名称已经以 .gz 结尾的解压缩文件,则此策略会失败,因为此文件将被跳过并保持解压缩状态。

标签: bash shell scripting


【解决方案1】:

只需检查目标中是否已存在*file1.repo.gz,如果存在则跳过。

#!/bin/bash

sourceFolder="/path/to/source"
destinationFolder="/path/to/destination"

for f in $( /usr/bin/find $sourceFolder/*.repo ); do
    if ! [ -f "$destinationFolder/*$f*" ]; then
        gzip -c $f > $destinationFolder/$f.gz
    fi
done

它在给定的源文件夹中查找每个文件*.repo,然后检查它的*.gz 是否已经存在于目标文件夹中,如果存在则跳过它;否则,如果 *.gz 位于目标文件夹中。

编辑:忘记设置存档名称。

【讨论】:

  • 我在运行脚本时遇到问题,告诉我 $destinationFolder 是 gzip -c 线上的目录,顺便说一句,感谢您的帮助
  • 是的,我忘记了存档名称的变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多