データのベースディレクトリを再帰的に実行し、その中の各ファイルを変更し、別のベースディレクトリに新しいファイルを作成します。だから私は2つの引数が必要です、1つはオリジナルのデータベースディレクトリのパス、もう1つは新しいファイルを置くベースディレクトリです。しかし、私のコードには何か問題があります。私はこれらの2つの引数を端末に入力するのではなく、main関数の下に置いています。誰かが私を助けることを願います。なぜこのbashスクリプトを再帰的に実行できないのですか?
以下は、私のコードです:
function traverse() {
for file in $(ls "${data_path}")
do
echo "in file: ${data_path}/${file}"
if [[ ! -d ${data_path}/${file} ]]; then
if [[ ${data_path}/${file} == *.nii.gz ]];then
echo "is nifti: ${data_path}/${file} "
else
echo "not file"
echo ${data_path}
temp_path=${data_path/'/data2/Projects/Incoming_monkey'/}
new_path="${new_destination}/${temp_path}"
mkdir -p ${new_path}
echo ${new_path}
fi
else
echo "entering recursion with: ${data_path}/${file}"
traverse "${data_path}/${file}" "${new_destination}"
fi
done
}
function main() {
echo "main start"
data_path=/data2/Projects/Incoming_monkey/MAJOM/08_20170706/func
new_destination=/data2/Projects/reorientation
traverse "${data_path}" "${new_destination}"
}
main
コード/データに4つの空白を付けます。 [edit-help](http://stackoverflow.com/editing-help)を見てください。 – Cyrus
グローバル変数は再帰の考え方を打ち消します。 –