標籤:分行符號 描述符 描述 data www. one htm nbsp 大括弧
任務需要:當我需要對一個檔案夾中的檔案,分別壓縮的時候:
原始的代碼:
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
Shell 多線程操作及線程數