我已经获得了一组数据文件(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向我展示了如何解压缩某些文件夹中的所有文件并将它们放入相应的文件夹中,但我希望一个文件夹中的所有文件都能简化进一步的操作,而且我还有两层的问题拉紧争夺,而不只是一个。
答案 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