2014-10-20 2864 views
-1

我已经给出了一组数据文件(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

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

指令:创建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