简而言之,我不确定我做错了什么,但基本上我想要做的是循环遍历所有 zip 文件,然后将其内容解压缩到具有 zip 名称的目录中。
例子:
文件:a.zip
,b.zip
命令
for i in `ls *.zip`; do unzip $i -d `echo $i | cut -f1 -d'.'` ; done
预期的:
文件a
夹内容a.zip
文件b
夹内容b.zip
怎么了:
未找到 zip 文件。unzip:无法找到或打开 a.zip、a.zip.zip 或 a.zip.ZIP。
对于可能出现的问题有什么提示吗?
答案1
我建议使用find
时不要解析 ls 或其本身的输出find
,以避免与以下问题相关的问题文件名中最终出现的特殊字符。
find . -name "*.zip" -exec bash -c ' unzip "$0" -d "${0%*.zip}" ' {} \;
答案2
这应该有效:
for i in *.zip; do
newdir="${i:0:-4}" && mkdir "$newdir"
unzip "$i" -d "$newdir"
done
答案3
用这个:
for i in `find | grep .zip$`;do unzip $i;done
编辑
先前的答案是错误的(;
for i in `find | grep .zip$ | sed '[email protected]$@@'`;do mkdir $i;unzip $i.zip -d $i;done
尝试一下这个!