![Shell 脚本将文件 SFTP 传输到远程服务器](https://linux22.com/image/1423425/Shell%20%E8%84%9A%E6%9C%AC%E5%B0%86%E6%96%87%E4%BB%B6%20SFTP%20%E4%BC%A0%E8%BE%93%E5%88%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
这可能是以前问过的问题,但我找不到好的问题/答案。我需要编写一个 shell 脚本,该脚本将由 PHP 程序(exec 函数)调用,以通过 SFTP 将所有 *.pdf 文件移动到远程目录。目标目录将保持不变。远程目录也将保持不变。文件将仅为 *.pdf 格式。
脚本必须使用 SFTP,这是必需的。SCP 不起作用。SFTP 端口也是自定义的,我必须将其放入下面的代码中。我不确定如何编写循环遍历目录中的 *.pdf 文件,然后在成功时删除它们。也许稍微不同的方法会更好。
#! /bin/ksh
TARGET_DIR=<path of target directory>
FILE_NAME_TO_CHECK=<file_name>
REMOTE_USER=<user_name>
REMOTE_PORT=<remote port>
REMOTE_MACHINE=<remote server name>
REMOTE_DIR=<path of remote directory>
cd ${TARGET_DIR}
sftp ${REMOTE_USER}@${REMOTE_MACHINE} -
答案1
您应该使用私钥验证来避免密码问题。
sftp -oPort=CUSTOMPORT -b BATCHFILE USER@DESTINATION
批处理文件(启动命令前准备好)
lcd LOCAL_PATH
cd REMOTE_TARGET_DIR
put *.pdf
exit
答案2
你可以使用 WinSCP 自动上传 SFTP 文件,如果您已经知道手动执行此操作所需的命令序列。我从以下答案中复制了示例脚本:
echo option batch abort > ftpcmd.dat
echo option confirm off >> ftpcmd.dat
echo open sftp://ftp_user:[email protected] -hostkey="server's hostkey" >> ftpcmd.dat
echo put directory_path\%.pdf >> ftpcmd.dat
winscp.com /script=ftpcmd.dat
del ftpcmd.dat