use*_*245 6 linux shell-script
我正在尝试列出嵌套 zip 中的文件,如下所示。它不是在第二级列出文件。
例如:
abc.zip
包含test1.zip
, test2.zip
,test3.zip
pqr.zip
包含test4.zip
, test5.zip
,test6.zip
for f in *.zip
do
unzip -l ${f}
for p in ${f}
do
unzip -l ${p}
done
done
Run Code Online (Sandbox Code Playgroud)
如果不将顶层文件实际解压缩到子文件夹中,您就无法做到这一点。
像这样的东西:
set -e
for f in *.zip
do
n=`basename -- "${f}" .zip`
mkdir -- "${n}"
cd -- "${n}"
unzip ../"${f}"
for p in *.zip
do
unzip -l -- "${p}"
done
cd ..
rm -rf -- "${n}"
done
Run Code Online (Sandbox Code Playgroud)
您可能应该验证是否${n}
已经存在,如果存在则生成错误。您还可以为子目录使用临时文件名:
dir=`mktemp -d zip-files.XXXXXX`
Run Code Online (Sandbox Code Playgroud)
然后做cd "${dir}"
,rm -rf "${dir}"
一旦完成。
更新:
用于set -e
确保如果出现问题,脚本会停止。特别是,如果mkdir -- "${m}"
失败,则cd -- "${m}"
也会失败,因此cd ..
会使您进入错误的目录级别,这就是rm -rf -- "${n}"
危险的地方。
使cd ..
语句更安全的另一种方法是在循环之前记住该目录for
并使用该路径,如下所示:
topdir=`pwd`
for ...
do
...
cd "$topdir" # instead of `cd ..`
...
done
Run Code Online (Sandbox Code Playgroud)
这样,意志rm -rf -- "${n}"
就只能在 中运作$topdir
。
使用临时目录也会使事情变得更加安全,因为这样无论顶部 zip 文件中的文件名是什么,目录创建/删除都将按预期进行。
归档时间: |
|
查看次数: |
223 次 |
最近记录: |