需要压缩特定大小的单个文件并删除 unix 中的原始文件

Need to zip individual files of certain size & remove the original files in unix

我想压缩从输出中获得的单个文件并删除原始文件。 objective 用于查找大于 9MB 的文件并单独压缩该大小的每个文件并删除其原始实例。像这样..

find test* -type f - size +9M 
zip -m <filenames (from the above output)> <individual filename.zip>

预期输出 -

test_abc1.txt.1.zip
test_abc2.txt.2.zip
test_abc3.txt.zip

find压缩单个文件,主要问题是如何自动生成zip文件名;为此,您可以在 find -exec 内联脚本中使用 shell 参数扩展:

find test* -type f -size +9M -exec sh -c '
    for f
    do
        z=${f##*/}.zip
        zip -j -m "$z" "$f"
    done
' _ {} +
备注:
  • z=${f##*/}.zip去掉$f的目录路径部分,在末尾追加一个.zip;例如,如果 $ftest1/file.txt,那么 $z 将是 file.txt.zip
    如果您还想用 .zip 替换文件扩展名,那么您可以使用 z=${f##*/} z=${z%.*}.zip 代替。

  • zip-j选项用于剥离ZIP压缩包内的目录路径。

  • zip-m 选项用于在成功生成 ZIP 存档后删除输入文件。