将gzip压缩文件替换为压缩文件

时间:2014-11-12 13:02:31

标签: unix directory zip gzip

在我的Unix服务器上,我在各种文件夹中有~2500个压缩文本文件。我需要将它们从gzip替换为zipped。

我希望可能使用Unix find

find . -name *.gz
./folder/download/All/fil_all.bed.gz
./folder/download/All/nr_all.bed.gz
./folder/download/All/fil_public.bed.gz
./folder/download/All/nr_public.bed_m.gz
./folder/download/All/nr_public.bed.gz

例如find . -name *.gz -exec ...

然而我不确定,枪口,拉链工艺的一个衬垫是什么。

1 个答案:

答案 0 :(得分:0)

在大多数unix上,你有gzcat向stdout发送gunzipped输出。然而,很难将其正确地压缩成单行(你可以这样做,但你没有拉链内容的名称,因为它们来自stdin)。所以我想最好是制作一个小脚本并从find中调用它。

e.g。基本gz2zip.sh(未经测试):

#!/bin/ksh
# input = $1 = gzipped input file name ending in .gz
BASENAME=$(basename $1 .gz)          # short name without path or extension
ZIPNAME=$(dirname $1)/$BASENAME.zip  # full name with .zip instead of .gz
TMPDIR=/tmp/gz2zip.$$                # place to unpack .gz in and pack .zip from
mkdir $TMPDIR
gzcat $1 > $TMPDIR/$BASENAME
(cd $TMPDIR; zip $ZIPNAME ./*)
rm -rf $TMPDIR

然后在里面使用它:

find .  -name "*.gz" -exec gz2zip.sh {} \;