如何解压缩已压缩两次的文件?

时间:2014-10-20 09:38:49

标签: ubuntu unzip

我已经获得了一组数据文件(csv),这些文件已放入文件夹,然后压缩,然后合并到另一个zip存档中。如何将所有文件放到同一目录中,同时确保我最终不会创建两个具有相同名称的文件?

例如,

data.zip

包含

20141015.zip 
20141008.zip

20141015.zip 包含一个目录,20141015,其中有两个文件,

smith.csv
jones.csv

20141008.zip包含一个目录,20141008,其中还有两个文件,smith.csv和johnson.csv 我想最终得到一个目录,

unzipped_data,

将包含

20141015-smith.csv
20141015-jones.csv
20141008-smith.csv
20141008-johnson.csv

This question向我展示了如何解压缩某些文件夹中的所有文件并将它们放入相应的文件夹中,但我希望一个文件夹中的所有文件都能简化进一步的操作,而且我还有两层的问题拉紧争夺,而不只是一个。

1 个答案:

答案 0 :(得分:3)

如果我了解您的需求,我认为这个脚本对您有好处。我在等你的评论。 :)

说明:创建 script.sh 并将脚本复制到 data.zip 存档的目录中。此脚本使用任何档案名称和任何csv名称。我根据您的需要创建了一个通用脚本。如果您需要什么,请发表评论。

#!/bin/bash

currLoc="$PWD"
path="${currLoc}"

cd ${currLoc}

#EXTRACT THE FIRST ARCHIVE IN A TEMP DIRECTORY

for filename in $path/*;
do  
    extension="${filename##*.}"
    if [ "${extension}" == 'zip' ]; then
        unzip $filename -d $path/temp
    fi

done

count=0

for filename in $path/temp/*;
do
    extension="${filename##*.}"         #EXTRACT THE EXTENSION TO COMPAIR IF IS AN ARCHIVE OR NOT
    name=${filename##*/}                #EXTRACT THE NAME OF ZIP FILE WITH EXTENSION
    name=${name%.*}                     #EXTRACT THE NAME OF ZIP FILE WITHOUT EXTENSION
    if [ "${extension}" == 'zip' ]; then
        ((count++))
        unzip $filename -d $path/temp/$count
        for file in $path/temp/$count/*
        do
            ext="${file##*.}"   
            if [ "${ext}" == 'csv' ]; then
                csvFileName=${file##*/}
                mv $path/temp/$count/$csvFileName $path/$name-$csvFileName
            fi
        done
    fi
done

#REMOVE THE TEMP DIRECTORY
rm -r $path/temp