我发现,.zip
当你递归浏览子目录时,提取目录时也需要目录的路径。那么你如何存储路径呢?这几乎已经完成了,但是当 中有空格时,它无法正常工作{zip_file}
。
zip_dir=$PWD/$(basename "${zip_file}")
答案1
我也是从你的另一个问题中创建的。我花了一点时间,但这就是我能想到的方法:根据 zip 文件名创建文件夹,.zip
从文件夹名称中删除 ,然后将 zip 文件解压到该文件夹中。
/bin/bash #!/bin/bash echo“开始创建文件夹……” 查找 . -type f -iname "*.zip" | 同时读取文件名 做 文件名1=${文件名:2} 文件夹名称=$PWD/"${filename1%.*}" mkdir -p "$文件夹名称" 解压缩“$文件名”-d“$文件夹名称” echo “创建目录 $foldername 并将文件提取到其中。” 完毕
此行filename1=${filename:2}
去掉了./
名称中的 。
答案2
编辑:我肯定没有正确测试这一点。
通常,在进行变量赋值时不需要引号,只有在取消引用变量时才需要。进行赋值时,不需要在要取消引用的变量周围加上引号,但由于取消引用发生在子 shell 中,因此需要在该${zip_file}
部分周围加上引号,以便将其值正确传递给 basename。引号是不是事实上需要围绕整行,因为这样它就会回到变量赋值的上下文中,而不需要引号,因为 bash 会正确地将值从子 shell 传递到赋值行。
感谢@janos 指出这一点。我不确定我在测试原始行时搞砸了什么,导致我走上了过多引号的道路。你是对的,以下内容没有问题:
zip_dir=$PWD/$(basename "${zip_file}")