linux某个目录下有1.csv、2.csv、3.csv....100.csv文件,需要批量压缩成1.zip、2.zip、3.zip....100.zip

linux某个目录下有1.csv、2.csv、3.csv....100.csv文件,需要批量压缩成1.zip、2.zip、3.zip....100.zip,这个shell脚本怎么写?

第1个回答  2015-08-18

如果压缩成1.csv.gz的话比较简单

find /path/to/dir -name *.csv | xargs gzip

如果不想原文件被删除的话

find /path/to/dir -name *.csv | xargs gzip -k

必须用zip的话没这么灵活了:

for ((i=1;i<101;i++)) do zip $i.zip $i.csv; done

 linux一般用gz的比较多。最后一种用awk也可以做到,不过比较麻烦。

第2个回答  2015-08-18
#!/bin/bash
for i in {1..100};do
    zip $i.zip $i.csv
done
echo "Zip is over"
exit 0

 补充:zip的压缩比并不是很大,在Linux下建议使用tar命令进行归档压缩。

如tar -jcf demo.tar.bz2 FILENAME

第3个回答  2015-08-18
#!/bin/sh
for csvname in `ls *.csv`;do
zipname=${csvname%\.*}
zip -r $zipname $csvname
done追问

谢谢。非常感谢。可以再请教你一个问题吗? 再把这些压缩后的1.zip 2.zip 3.zip 4.zip FTP上传到另外一台服务器的/home/xxxx/目录,另外一台机器的用户名和密码是user1/user1, 这个脚本怎么写。

追答

需要设置ssh无密码访问或者安装sshpass命令
#!/bin/sh
for csvname in `ls *.csv`;do
zipname=${csvname%\.*}
zip -r $zipname $csvname
scp ${zipname}.zip [email protected]:/home/user1
done

本回答被提问者采纳
相似回答