문제
.jpg, .png, .gif images가 포함 된 zip 아카이브가 포함 된 AA 디렉토리가 있습니다. 각 아카이브를 압축하고 이미지를 찍고 아카이브의 이름을 가진 폴더에 넣고 싶습니다.
그래서:
files/archive1.zip
files/archive2.zip
files/archive3.zip
files/archive4.zip
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 파일에 다른 디렉토리에 동일한 파일 이름이있는 경우 충돌이있을 수 있습니다 (디렉토리 구조를 평평하게하려면이를 피할 수 없습니다).
다른 팁
요컨대
1 라이너 찾기 + 압축 으로이 작업을 수행 할 수 있습니다.
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"
그것을 a와 결합하십시오 find
, 모든 ZIPS에서 모든 이미지를 추출 할 수 있습니다.
find . -name "*.zip" -type f -exec unzip -d images/ {} "*.jpg" "*.png" "*.gif" \;
사용 unzip -j
Zip의 내부 디렉토리 구조의 추출을 정크하기 위해 하나의 명령으로 모든 것을 수행 할 수 있습니다. 이것은 당신에게 하나의 라이너로 원하는 zip 이름으로 분리 된 평평한 이미지 목록을 제공합니다.
find . -name "*.zip" -type f -exec unzip -jd "images/{}" "{}" "*.jpg" "*.png" "*.gif" \;
한계는 그게됩니다 unzip -d
하나 이상의 새로운 수준의 디렉토리를 만들지 않으므로 mkdir images
첫 번째. 즐기다.
Zip 라이브러리를 사용하여 프로그램을 작성할 수 있습니다. 모노를 사용하면 사용할 수 있습니다 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 's 아카이브 zip 지핑/압축을 풀기에 좋은 라이브러리입니다.
첫 번째 답변에 대한 내 생각은 다음과 같습니다 ...
#!/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 -d ${dir_name}/ ${zip_name} *.jpg *.png *.gif
나는 이것을 테스트하지 않았지만 작동해야합니다 ... 또는이 라인을 따라 무언가가 작동해야합니다. 첫 번째 솔루션보다 확실히 더 효율적입니다. :)
도움이 되었기를 바랍니다!