任务需要:当我需要对一个文件夹中的文件,分别压缩的时候:
原始的代码:
1 #!/usr/bin/shell 2 function getdir(){ 3 for element in `ls $1` 4 do 5 #echo $element 6 dir_or_file=$1$element 7 8 #echo $dir_or_file 9 if [ -d $dir_or_file ]10 then11 #echo tar cvf tar_data/$element.tar $dir_or_file12 `zip -q -r ../tar_data/$element.zip $dir_or_file`13 fi14 done15 }16 root_dir=""17 getdir $root_dir
多线程压缩的代码:
改成多线程实现非常简单,只需要在do后面的大括号加 & 符号,在done后面加一个wait,表示父进程等待子进程退出后再退出。
在linux中,在命令的末尾加上&
符号,则表示该命令将在后台执行,这样后面的命令不用等待前面的命令执行完就可以开始执行了。示例中的循环体内有多条命令,则可以以{}
括起来,在大括号后面添加&
符号。
1 #!/usr/bin/shell 2 function getdir(){ 3 for element in `ls $1` 4 do 5 { 6 #echo $element 7 dir_or_file=$1$element 8 9 #echo $dir_or_file10 if [ -d $dir_or_file ]11 then12 #echo tar cvf tar_data/$element.tar $dir_or_file13 `zip -q -r ../tar_data/$element.zip $dir_or_file`14 fi15 }&16 done 17 wait18 }19 root_dir=""20 getdir $root_dir
控制多线程个数的代码:
#!/usr/bin/shellTHREAD_NUM=3#定义描述符为9的管道mkfifo tmpexec 9<>tmp#预先写入指定数量的换行符,一个换行符代表一个进程for ((i=0;i<$THREAD_NUM;i++))do echo -ne "\n" 1>&9donefunction getdir(){ for element in `ls $1` do { read -u 9 { #echo $element dir_or_file=$1$element #echo $dir_or_file if [ -d $dir_or_file ] then #echo tar cvf tar_data/$element.tar $dir_or_file `zip -q -r ../tar_data/$element.zip $dir_or_file` fi }& } done wait}root_dir=""getdir $root_dir
参考来源:
http://www.cnblogs.com/signjing/p/7074778.html
http://m.jb51.net/article/51720.htm