首页 > 解决方案 > 仅压缩新文件而不再次压缩旧文件更改其时间戳

问题描述

场景:在文件夹 1 上:运行此命令后,我们有 file1.repo 文件 2.repo 文件 3.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)

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

标签: bashshellscripting

解决方案


只需检查*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已经存在于目标文件夹中,如果存在则跳过它;否则 if*.gz将其放入目标文件夹。

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


推荐阅读