在我的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 ...
然而我不确定,枪口,拉链工艺的一个衬垫是什么。
答案 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 {} \;