开发者

How can I use a single command to unzip every file in a directory, into a new unique directory with the same name as the file

I have a directory full of zip files. Each called something like 'files1.zip'. My instinct is to use a bash for loop to unzip each file.

Trouble is, many of the 开发者_开发百科files will unzip their contents straight into the parent directory, rather then unfolding everything into their own unique directory. So, I get file soup.

I'd like to ensure that 'files1.zip' pours all of it's files into a dir called 'files1', and so on.

As an added complication, some of the filenames have spaces.

How can I do this?

Thanks.


for f in *.zip; do
  dir=${f%.zip}

  unzip -d "./$dir" "./$f"
done


Simple one liner

$ for file in `ls *.zip`; do unzip $file -d `echo $file | cut -d . -f 1`; done


you can use -d to unzip to a different directory.

for file in `echo *.zip`; do
    [[ $file =~ ^(.*)\.zip$ ]]
    unzip -d ${BASH_REMATCH[1]} $file
done
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜