ls filename在lftp中不起作用

Ger*_*ely 5 unix lftp

我创建了一个lftp脚本,将单个文件上传到Web托管服务提供商.

用例是我从存储库根目录中调用它,因此这里和远程服务器中的相对路径是相同的.

#!/bin/bash

DIRNAME=$(dirname $1)
FILENAME=$(basename $1)
REPO_ROOT=$(pwd)
ABSOLUTE_PATH=${REPO_ROOT}/$1

lftp -u user,passwd -p port sftp://user@hosting <<EOF
cd $DIRNAME
put  $ABSOLUTE_PATH 
ls -l $FILENAME
quit 0
EOF
Run Code Online (Sandbox Code Playgroud)

它有效,有一个小而烦人的bug.为了检查它是否真的上传了文件,我ls -l最后放了一个.它失败了,我不明白为什么:

ls: Access failed: No such file(functions.php)   
Run Code Online (Sandbox Code Playgroud)

我试图用relscache flush,但徒劳无功.我正在使用lftp 4.0.9.

Ger*_*ely 8

一些谷歌搜索终于给出了邮件存档的结果

它是lftp中SFTP协议实现的限制.它不能列出单个文件,只能列出特定目录.

幸运的是,lftp允许管道,所以

ls -l | grep  "$FILENAME"
Run Code Online (Sandbox Code Playgroud)

解决了这个问题.