0
function syncfile(){
                echo "[ DONE $file ]"
        return ;
}
function syncfolder(){

        folder=$1
        for foo in `ls -1 $folder`
        do

                file="$folder/$foo"

                        if [ -d $file ];then
                                syncfolder $file
                        elif [ -e $file ];then
                                syncfile $file
                        else
                                echo "$file is neither file nor directory"
                        fi
        done
        return;
}

上記は再帰のための私の2つの関数です..私がそれを呼び出す syncfolder $foldernameと、次の場合に適切な出力が得られません..

階層が以下のようなものであるとします

portchanges/
portchanges/script/script1/script1.sh
portchanges/script/script1/script2.sh
portchanges/script/script1/script3.sh

portchanges/script/script4.sh
portchanges/script/script5.sh

portchanges/script6.sh
portchanges/script7.sh

portchanges/appl/script11/script11.sh
portchanges/appl/script11/script12.sh
portchanges/appl/script11/script13.sh

foldername=portchanges 、私が電話した場合syncfolder $foldername

の場合のみ処理します。

portchanges/script/script1/script1.sh
portchanges/script/script1/script2.sh
portchanges/script/script1/script3.sh

関数呼び出しで...そして関数のfunction syncfile()に行きます。returnsyncfolder

ディレクトリ内を検索しscript6.shます!! これは完全に不適切な動作です !!script7.shportchanges/script/script1/

フォルダ全体とすべてのファイルがsyncfile()機能するように再帰的に処理しますか?

4

2 に答える 2

5

folder変数を として宣言しますlocal。再帰呼び出しで呼び出し元の変数の値を変更したくない場合。

于 2013-04-02T09:45:21.037 に答える
0

私の場合、以下が機能しています。ディレクトリ名を出力したい場合は、それを syncfile に渡します。

function syncfolder(){
        syncfile $1
        local folder=$1
        for foo in `ls -1 $folder`
        do

                file="$folder/$foo"

                        if [ -d $file ];then
                                syncfolder $file
                        elif [ -e $file ];then
                                syncfile $file
                        else
                                echo "$file is neither file nor directory"
                        fi
        done
        return;
}
于 2013-04-02T09:48:27.093 に答える