我基本上只需要复制 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"
这可能更明显一些。
第三条路
第三种方法可能是将脚本放在服务器上,然后将参数传递给它。