[英]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.