デフォルトでは、SSHセッションの複数のフォルダディレクトリに最後に作成されたフォルダをコピーするだけです。これを行うための正しいfindコマンドがありますが、結果をSSHセッションに保存できないようです。変数LATEST_FOLDER
が空で、次のことを試しました。
cp -f arkOutput/$(find . -type d -exec stat --printf="%Y\t%n\n" {} \; | sort -n -r | head -1 | cut -f2 | cut -c 3-)/* /synology/data/${OUTPUT_PATH}/${i}/ark
完全なSSHセッションコードは次のとおりです。
ssh [email protected] << EOF
cd /data/dev/${ARK_PATH}/
./gradlew bootRun --no-daemon;
LATEST_FOLDER=$(find . -type d -exec stat --printf="%Y\t%n\n" {} \; | sort -n -r | head -1 | cut -f2 | cut -c 3-);
cp -f arkOutput/${LATEST_FOLDER}/* /synology/data/${OUTPUT_PATH}/${i}/ark
EOF
/data/devディレクトリは私がログインしているサーバーにのみ存在するため、事前にインポートして渡すことはできません。 ./gradlew bootRunコマンドは私が興味のあるフォルダを作成します。
答え1
現在の仕事の処理方法を修正してください
ssh [email protected] << EOF
cd /data/dev/${ARK_PATH}/
./gradlew bootRun --no-daemon
LATEST_FOLDER=\$(find . -type d -exec stat --printf="%Y\t%n\n" {} \; | sort -n -r | head -1 | cut -f2 | cut -c 3-)
cp -f arkOutput/\${LATEST_FOLDER}/* /synology/data/${OUTPUT_PATH}/${i}/ark
EOF
あなたがそれをしたいのか、${i}
それとも\${i}
電子が欲しいのかわかりません。
2番目の方法
もう1つの方法は、2〜3個のSSHコマンドに分割することです。例えば
ssh "[email protected]" "cd /data/dev/${ARK_PATH}/ && ./gradlew bootRun --no-daemon"
LATEST_FOLDER=$(ssh "[email protected]" "find /data/dev/${ARK_PATH}/ -type d -exec stat --printf='%Y\t%n\n' {} + | sort -n -r | head -1 | cut -f2 | cut -c 3-" )
ssh "[email protected]" "cp -f /data/dev/${ARK_PATH}/arkOutput/${LATEST_FOLDER}/* /synology/data/${OUTPUT_PATH}/${i}/ark"
これはもう少し明らかです。
3番目の方法
3番目のアプローチは、スクリプトをサーバーに配置し、パラメータをサーバーに渡すことです。