解压缩unix中具有.done文件的Zip文件



问题陈述:我想从/home/a/zip_put这样的文件夹中解压缩文件,其中将有2个zip文件,如:/home/a/zip_puta_EOD-20121129.zipb_EOD-20121129.zip

此外,每个zip都会有一个相应的.done文件(基本上,一旦zip被完全复制,就会创建一个.done文件)比如:a_EOD-20121129.zip.doneb_EOD-20121129.zip.done

我正在尝试编写一个脚本来解压缩具有相应.done文件的文件,并将文件移动到/home/b/file_input位置。在文件被强制移动后,我想创建一个带有.done-ext.的文件。例如:每个zip都有一个xml文件,如a_EOD-20121129.xml/b_EOD-20121129.xml

所以输出文件夹会有类似的内容:

a_EOD-20121129.xmla_EOD-20121129.xmlb_EOD-20121129.xmlb_EOD-20121129.xml.done

到目前为止我尝试过的内容:

for file in $(find . -name "*.zip" -type f)
do
unzip $file -d /home/b/file_input
rm $file    
done

它解压缩a.zip/b.zip并创建xml文件。

我面临的问题-

  1. 如何在脚本中设置仅拾取具有相应.done文件的文件的条件?

  2. 如何在解压缩和移动文件后创建相应的.done文件。(必须采用文件名并创建一个附加有相同名称的文件。完成)?

您可以尝试以下脚本(未测试):

for file in $(find . -name "*.zip" -type f)
do
if [ -f $file".done" ];    then         #test if there is a done file for that zip
unzip $file -d /home/b/file_input
for filezip in `unzip -l $file | awk '/.xml$/{print $NF}'`; do  #creates the .done files for each file inside the zip
touch /home/b/file_input/$filezip".done"
done
rm $file    
fi
done

单向(未测试)

for file in $(find . -name "*.zip" -type f)
do
[ -f "${file}.done" ] || continue
unzip $file -d /home/b/file_input
for file1 in $(unzip -l $file | awk '/.xml$/{print $NF}')
do
cp /home/b/file_input/$file1 /home/b/file_input/${file1}.done
done
rm $file    
done

使用-f条件对.done文件进行检查。如果为false,表示.done文件不存在,则循环将继续拾取下一个文件。cp命令将从.zip文件创建一个.done文件。

相关内容

  • 没有找到相关文章

最新更新