put *。*只将少量文件从本地文件夹移动到SFTP

时间:2015-01-27 11:16:45

标签: shell batch-processing sftp spawn

我正在尝试使用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秒。这应该与我的环境有关。我在有限的环境中工作。多谢你们。但仍然可以帮助我如何只选择新文件(我的老板不接受将旧文件移动到备份文件夹)。

2 个答案:

答案 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/