質問
しているディレクトリをzipアーカイブを含むjpg、.png.gifます。たいへの解凍ダウンロードし、各アーカイブの画像だけフォルダの名前のアーカイブを展開します。
い:
files/archive1.zip
files/archive2.zip
files/archive3.zip
files/archive4.zip
Open archive1.zip ●sunflower.jpg,rose_sun.gif.フォルダの作成ファイル/archive1/メモリの使用範囲のサイズは画像をフォルダでfiles/archive1/folder1.jpg,files/archive1/rose_sun.gif.このため、各アーカイブを展開します。
ないんですけどこれを行うには、すべてのご提案を歓迎します。私は600以上のアーカイブや自動解決するようにしてほ、好ましくはlinuxます。
解決
の線に沿って何かます:
#!/bin/bash
cd ~/basedir/files
for file in *.zip ; do
newfile=$(echo "${file}" | sed -e 's/^files.//' -e 's/.zip$//')
echo ":${newfile}:"
mkdir tmp
rm -rf "${newfile}"
mkdir "${newfile}"
cp "${newfile}.zip" tmp
cd tmp
unzip "${newfile}.zip"
find . -name '*.jpg' -exec cp {} "../${newfile}" ';'
find . -name '*.gif' -exec cp {} "../${newfile}" ';'
cd ..
rm -rf tmp
done
これはテストされ、ファイル名にスペース(zipファイルと抽出されたファイルの両方)を処理します。 zipファイルが異なるディレクトリに同じファイル名を持っている場合は、(あなたは、ディレクトリ構造を平らにするつもりなら、あなたがこの問題を回避することはできません)の衝突を持っていることがあります。
他のヒント
短
させることができ、ライナー見+unzip.
find . -name "*.zip" -type f -exec unzip -jd "images/{}" "{}" "*.jpg" "*.png" "*.gif" \;
詳細
unzip
を指定するために使用できるファイル:
unzip archive.zip "*.jpg" "*.png" "*.gif"
や -d
対象ディレクトリ:
unzip -d images/ archive.zip "*.jpg" "*.png" "*.gif"
みいた find
, までのすべての画像はすべてのzips:
find . -name "*.zip" -type f -exec unzip -d images/ {} "*.jpg" "*.png" "*.gif" \;
を使用 unzip -j
に迷惑を抽出のzip内部のディレクトリ構造も明らかになってしまうのですべて一つのコマンドです。これにより、フラット画像一覧を分離による郵便名を希望しています。
find . -name "*.zip" -type f -exec unzip -jd "images/{}" "{}" "*.jpg" "*.png" "*.gif" \;
制限であること unzip -d
なに創出されることとなります一つの新しいレベルのディレクトリで mkdir images
ます。楽しめます。
あなたはジップライブラリを使用してプログラムを書くことができます。あなたがモノを行う場合は、 DotNetZip に使用することができます。
のコードは次のようになります:
foreach (var archive in listOfZips)
{
using (var zip = ZipFile.Read(archive)
{
foreach (ZipEntry e in zip)
{
if (IsImageFile(e.FileName))
{
e.FileName = System.IO.Path.Combine(archive.Replace(".zip",""),
System.IO.Path.GetFileName(e.FileName));
e.Extract("files");
}
}
}
}
Perlのアーカイブ・ジップのは良いです/解凍をビュンするためのライブラリます。
ここで最初の答えが私の感想だ...
#!/bin/bash
cd files
for zip_name in *.zip ; do
dir_name=$(echo "${zip_name}" | sed -e 's/^files.//' -e 's/.zip$//')
mkdir ${dir_name}
7z e -o${dir_name}/ ${zip_name} *.jpg *.png *.gif
done
または、あなただけの正規のunzipコマンドを使用したい場合は...
unzip -d ${dir_name}/ ${zip_name} *.jpg *.png *.gif
私はこれをテストしていませんが、それは仕事...またはこれらの線に沿って何かする必要があります。間違いなく、より効率的な最初のソリューションよりも。 :)
この情報がお役に立てば幸い!