Linux:使用unzip命令解压zip文件到与其同名的目录中

背景

假设服务器目录:/data/test目录下有两个zip压缩文件:111.zip和222.zip,如果使用unzip 111.zip命令解压,会将111.zip中的文件直接解压在/data/test的根目录下;

但是需求是,想让111.zip和222.zip解压后的文件分别放到/date/test下的111和222目录下,那应该怎么写呢,研究了下,发现可以通过如下方式执行

脚本

在/data/test目录下建一个名为:unzip.sh的脚本,内容如下

#!/bin/bash
savepath=/data/test/
cd ${savepath}
for file in `find . -name *.zip`
do
unzip "$file" -d ${savepath}"${file%.zip}"
done

实际应用

场景:通过ftp拉取远程服务器目录中的压缩文件(rar和zip)到服务器本地目录,然后通过命令解压

脚本如下(供参考)

#!/bin/bash
#从ftp下载到指定位置
today=`date -d last-day '+%Y%m%d'`
# 本地服务器存储目录
savepath="/data/savepath/"
# ftp服务器拉取目录
getpath="/data/remotepath"
filename="_${today}_"
# 获取当天时间 格式为*_20220202_*的文件
wget -r -nH -P $getpath/$today ftp://xxx.xxx.xxx.xxx:8889/download/test${filename}* --ftp-user=username --ftp-password=password
file=`ls ${getpath}/${today}/download`
echo "================================================="
echo "时间:`date '+%Y%m%d %T'`"
echo "拉取文件:$file"
echo "移动文件到指定目录"
cd ${getpath}/${today}/download/
for i in `find . -type f -name "*.zip" -print`;do unzip -O gbk -o $i -d ${savepath}"${i%.zip}"; done
for i in `find . -type f -name "*.rar" -print`;do unrar x -y $i ${savepath}; done

#cp -a ${getpath}/${today}/download/* $savepath
echo `ls $savepath`

unzip -O gbk -o 第一个-O gbk 代表使用gbk解码,避免出现中文乱码问题(项目中有遇到,如你那里没问题可以不加),第二个-o代表如果目录中存在同名文件则覆盖,这里也可以根据实际情况不加

unrar x -y 中的x 代表解压后新建一个跟压缩文件同名的目录,然后将解压出来的文件放在这个目录中;-y表示如果有遇到文件重复的情况提示是否需要覆盖时执行“是”的操作(这里也可以根据实际情况不加)

你可能感兴趣的:(Linux,linux,运维,服务器)