기본적으로 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~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"
이것은 좀 더 분명할 수 있습니다.
세 번째 방법
세 번째 접근 방식은 스크립트를 서버에 배치하고 매개변수를 서버에 전달하는 것입니다.