以下は、forステートメント内でunrarステートメントを作成する方法を見つけるためのより大きなコードの一部です。
DST_DIR="/Volumes/Mac_Storage/Test_Folder"
cd "/Volumes/Mac_Storage/Test_Data"
find "$filePath" -type f "${EXT_OPTS[@]}" -exec sh -c '
for pathName do
unzip -o '*.zip' && unrar e -r '*.rar' "$DST_DIR" && rm *.r*
echo "$pathName"
printf "%s\n" "$pathName"
sleep 1
done' sh {} +
問題のある行:
unzip -o '*.zip' && unrar e -r '*.rar' "$DST_DIR" && rm *.r*
外部ではうまく機能しますが、forステートメントに追加するとすぐにファイル名の不一致エラーが発生します。
乾杯
答え1
DST_DIR
スクリプト内の変数は、sh -c
呼び出しシェルの同じ名前の変数とは異なりますfind
。あなたは設定する必要がありますDST_DIR
~へscript として使用sh -c
または呼び出すときに渡します。
find ... -exec sh -c '
DST_DIR="/Volumes/Mac_Storage/Test_Folder"
for pathName do
# more code here
done' sh {} +
ここで、変数は内部スクリプトからリテラル文字列に値を取得します。DST_DIR
他の場所で変数を使用しない場合は、前の場所から変数を削除できます。
または、
find ... -exec sh -c '
DST_DIR=$1; shift
for pathName do
# more code here
done' sh "$DST_DIR" {} +
ここで、変数値はコマンドラインを介して外部環境から内部スクリプトに渡されます。最初のパラメータは$1
スクリプトに入力された値を保持します。内部DST_DIR
変数に割り当てられた後に$1
移動します$@
。その後、サイクルは以前と同様に続きます。