我得到了一组数据文件(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
这个问题告诉我如何解压缩某些文件夹中的所有文件并将它们放到相应的文件夹中,但是我希望将一个文件夹中的所有文件简化为进一步的操作,而且我还面临着两层压缩的问题,而不是只有一个。
如果我了解您的需求,我认为此脚本对您有好处。我正在等待您的评论。:)
说明:创建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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句