2014-10-20 2871 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