繁体   English   中英

如何查找 zip 字符串是否存在于文件行中。 如果找到解压 zip 文件

[英]How to find zip string is present in line of the file or not. if found extarct the zip file

我有一个具有文件路径的文件。 我将这些文件逐行传递给脚本。 我必须在文件路径中找到 zip 文件。 如果它存在,我必须提取 zip 文件。 我怎样才能做到这一点? 我试过下面的代码但没有用。

我传递给脚本的文件:zipfile:

    device/sprd/sharkle/common/bootanimation.zip/bootup/0467.png
    device/sprd/sharkle/common/bootanimation.zip/bootup/0567.png
    base/tests/TransitionTests/res/drawable-nodpi/self_portrait_square_400.jpg
    base/media/tests/contents/media_api/video/MPEG2_1500_AAC_128.mp4
    device/sprd/sharkle/common/image.zip/bootup/0367.png
    device/sprd/sharkle/common/tycho.zip/bootup/0195.png
    device/sprd/sharkle/sp9820e_2c10/modem_bins/ltemodem.bin/mtcd

脚本:

#! /bin/bash
 file="zipfile"
 while IFS= read line;
 do

 if grep -q ".zip" $line ;
 then
#i have to extract zip file
 else
 echo not present
 fi   
done <"$file" 

使用参数扩展对路径进行切片并使用关联数组来避免重复。

#!/usr/bin/env bash

file=zipfile

declare -A zipfiles

while IFS= read -r line; do
  if [[ $line == *".zip/"* ]]; then
    to_remove=${line##*.zip}
    line=${line%"$to_remove"}
    ((zipfiles["$line"]++))
  else                              
    printf >&2 'No zip file at %s\n' "$line"
  fi
done < "$file"

for item in "${!zipfiles[@]}"; do
  echo unzip "$item"
done

示例文件中脚本的 Output。

No zip file at base/tests/TransitionTests/res/drawable-nodpi/self_portrait_square_400.jpg
No zip file at base/media/tests/contents/media_api/video/MPEG2_1500_AAC_128.mp4
No zip file at device/sprd/sharkle/sp9820e_2c10/modem_bins/ltemodem.bin/mtcd
unzip device/sprd/sharkle/common/image.zip
unzip device/sprd/sharkle/common/tycho.zip
unzip device/sprd/sharkle/common/bootanimation.zip
  • 正如@tripleee 在评论中提到的那样,在某些情况下这会失败,或者无法按预期工作。

  • 需要更多测试/错误检查,但可以随意调整代码。

  • 如果您对 output 感到满意,请删除echo (如果需要,可以添加更多uzip选项)。

  • 从您发布的文件中进行有根据的猜测,它看起来像是来自 find 的 output。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM