我正在尝试使用shell脚本将文件夹下的所有文件移动到SFTP文件夹,以用于我的批处理作业。但每次运行时只会移动几个文件。不是所有的文件。
/usr/local/bin/expect -c "spawn sftp -o Identityfile="/export/home/user/.ssh/example.ppk" $SFTP_USERID@$SFTP_SERVER
expect \"password: \"
send \"$PASSWORD\n\"
expect \"sftp> \"
send \"cd $DESTDIR\r\"
expect \"sftp> \"
send \"lcd $LOCALDIR\r\"
expect \"sftp> \"
send \"put *.* \r \"
expect \"sftp> \"
send \"quit\r\"
expect \"sftp> \"" >> $BATCH_DIR/logs/batch"$todaydatetime".log
此脚本每次成功运行,但只有少数文件被移动到SFTP目标文件夹。在日志中,我总是看到只有19个文件从本地文件夹上传到SFTP文件夹(每次都是相同的文件)。 我理解为什么每次都有相同的文件,但我无法弄清楚为什么只有几个文件。
SFTP命令有效时间是否有限制?
请帮助我如何更改命令以仅接受新文件。 " rsynch"没有用。
嗨肯斯特,mput对我不起作用。传输的文件是我的本地文件夹下以数字开头的文件。在我的本地文件夹中有236个文件,其中19个以数字开头的文件正在转移,即使文件名中有空格或文件扩展名可能是pdf或xls,或者总是相同的19个文件被转移意味着不是传输以字母开头的单个文件。我手动尝试了相同的步骤来检查文件名/权限是否导致某些问题,但手动工作正常:(所有文件都已传输。
对不起我的错误。
我刚刚在lcd步骤之后添加了以下行。现在只传输了6个文件。 期待\" sftp> \" 发送\" lls -ltr \ r \"
问题看起来不像命令或文件名。
我在所有步骤之前和结束时回显date '+%Y%m%d%H%M%S'
。程序每次只执行12秒。这应该与我的环境有关。我在有限的环境中工作。多谢你们。但仍然可以帮助我如何只选择新文件(我的老板不接受将旧文件移动到备份文件夹)。
答案 0 :(得分:1)
更改行:
send \"put *.* \r \"
到
send \"mput * \r \"
因为PUT *.*
是一个丑陋的Windows主义。
您还应该考虑在$DESTDIR
和$LOCALDIR
附近加双引号,以防它们包含空格。
答案 1 :(得分:0)
您可以尝试使用sshfs,然后使用" regular"像cp这样的命令,它应该为你提供更多选项,并且应该像常规文件系统一样。
sshfs $SFTP_USERID@$SFTP_SERVER: /temporary/mount/path
cp -R $LOCALDIR/* /temporary/mount/path/$DESTDIR
fusermount -u /temporary/mount/path/