使用ftp路径运行lftp的bash脚本

时间:2016-03-03 12:15:07

标签: bash sed .profile

我正在尝试编写一个bash别名/函数,它采用ftp路径并运行lftppget文件。

给定一个远程路径,空格编码为%20,如:

sftp://ftp.example.com/Some%20Folder/BigFile.mov

我有这个片段来清理URL的%20和服务器部分:

echo $1 | sed 's/%20/ /g' | sed 's/sftp:\/\/ftp.example.com//g';

给了我

/Some Folder/BigFile.mov

现在我需要通过lftp这样运行:

lftp sftp://ftp.example.com -u user,pass -e "pget -cn10 '/Some Folder/BigFile.mov'"

我想创建一个带有此命令功能的别名,让我们称之为lget,这样我就可以使用原始网址了:

lget "sftp://ftp.example.com/Some%20Folder/BigFile.mov"

此处的解决方案应该类似

alias lget='function _lget(){ lftp ... };_lget'

但是我完全迷失了如何在函数中包含参数,通过sed处理它,以及如何处理嵌套的引号。

我可能需要一些反击......

1 个答案:

答案 0 :(得分:0)

这样的东西?

lget () {
    local filename=${1#sftp://ftp.example.com}
    lftp sftp://ftp.example.com -u user,pass -e "pget -cn10 '${filename//%20/ }'"
}

我不明白你为什么要创建一个具有无用名称的函数,只是为了能够将有用的名称分配给一个简单调用该函数的别名(尽管这似乎是某些圈子中的常态) ,由于我不知道的原因)。

您不需要sed,因为Bash包含用于字符串替换的内置函数。如果您需要将其移植到缺少${variable//global/replacement}功能(以及local关键字)的POSIX shell,请注意properly quote传递给sed的字符串。 (用于检索带有前缀的变量值的${variable#prefix}语法在POSIX shell中可用。哦,对于记录,单个sed脚本可以执行多个替换; sed -e 's/foo/bar/' -e 's/baz/quux/g' 。)