vac*_*che 5 linux file unzip archive
我有一个包含.jpg,.png,.gif图像的zip档案目录.我想解压缩每个存档,只获取图像并将它们放在一个带有存档名称的文件夹中.
所以:
files/archive1.zip
files/archive2.zip
files/archive3.zip
files/archive4.zip
Run Code Online (Sandbox Code Playgroud)
打开archive1.zip - take sunflower.jpg,rose_sun.gif.创建文件夹files/archive1 /并将图像添加到该文件夹,so files/archive1/folder1.jpg,files/archive1/rose_sun.gif.对每个存档执行此操作.
我真的不知道如何做到这一点,欢迎所有的建议.我有超过600个档案,自动解决方案将成为救星,最好是Linux解决方案.
简而言之
您可以使用单线查找+解压缩来执行此操作。
find . -name "*.zip" -type f -exec unzip -jd "images/{}" "{}" "*.jpg" "*.png" "*.gif" \;
Run Code Online (Sandbox Code Playgroud)
详细
unzip 允许您指定所需的文件:
unzip archive.zip "*.jpg" "*.png" "*.gif"
Run Code Online (Sandbox Code Playgroud)
和-d目标目录:
unzip -d images/ archive.zip "*.jpg" "*.png" "*.gif"
Run Code Online (Sandbox Code Playgroud)
将其与组合,find您可以提取所有zip中的所有图像:
find . -name "*.zip" -type f -exec unzip -d images/ {} "*.jpg" "*.png" "*.gif" \;
Run Code Online (Sandbox Code Playgroud)
使用unzip -j垃圾提取zip内部目录结构的提取,我们可以在一个命令中完成全部操作。这将为您提供平面图像列表,并以您希望作为单线的zip名称分隔。
find . -name "*.zip" -type f -exec unzip -jd "images/{}" "{}" "*.jpg" "*.png" "*.gif" \;
Run Code Online (Sandbox Code Playgroud)
一个限制是unzip -d创建的目录不会超过一个新级别,因此仅此mkdir images一个。请享用。
mkdir files/archive1
7z e -ofiles/archive1/ files/archive1.zip *.jpg *.png *.gif
Run Code Online (Sandbox Code Playgroud)
(刚刚测试过,它有效。)
大致如下:
#!/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
Run Code Online (Sandbox Code Playgroud)
这已经过测试,将处理文件名中的空格(zip 文件和提取的文件)。如果 zip 文件在不同的目录中具有相同的文件名,则可能会发生冲突(如果要扁平化目录结构,则无法避免这种情况)。
| 归档时间: |
|
| 查看次数: |
7876 次 |
| 最近记录: |