我在使用bash创建多个zip时遇到问题。我试图制作代码,但失败了。我只想使用bash中的循环创建多个zip,像这样
Folder 1000
File 1
File 2
to be 1000.zip
Folder 999
File 1
File 2
to be 999.zip
loop until 1.zip
它是如何工作的?我在bash shell上是新的
您可以使用bash
循环在每个文件夹上执行任意命令,例如:
pax> for folder in {15..1} ; do echo zip add ${folder}.zip ${folder} ; done
zip add 15.zip 15
zip add 14.zip 14
zip add 13.zip 13
zip add 12.zip 12
zip add 11.zip 11
zip add 10.zip 10
zip add 9.zip 9
zip add 8.zip 8
zip add 7.zip 7
zip add 6.zip 6
zip add 5.zip 5
zip add 4.zip 4
zip add 3.zip 3
zip add 2.zip 2
zip add 1.zip 1
显然,我的命令只是回显might所做的压缩文件夹,您只需要使用actual压缩命令。
如果可能不是所有目录都存在,则可以选择:
for folder in {1000..1} ; do
rm -rf ${folder}.zip
[[ -d ${folder} ]] && echo zip add ${folder}.zip ${folder}
done
这总是删除当前的Zip文件,然后仅在目录实际存在时创建一个新的Zip文件。
# for comment in bash script
$ which bash;
-> /bin/bash
# put this output in the first line
# vim is the text editor, choose the one you like.
$ vim lsDirAndCompress.sh;
#!/bin/bash
# debug script, uncomment it
# set -x
# ls = long list; grep ... select directories; awk ... get directories name;
dir=$(ls -l | grep ^d | awk -F" " '{print $NF}');
# to debug
# echo $dir;
# create directory
mkdir compress;
# for loop for each directory
for i in $(echo $dir); do
# c create ; z gzip ; f file ;
# directory compress/name ; $i directories to compress ;
tar czf compress/$i.tar.gz $i;
# for compression with bzip2
# tar cjf compress/$i.tar.bz2 $i;
done;