bash 到 运行 lftp 的脚本 ftp 路径
bash script to run lftp with ftp path
我正在尝试编写一个 bash alias/function,它采用 ftp 路径和 运行s lftp
到 pget
文件。
给定一个远程路径,空格编码为 %20
,例如:
sftp://ftp.example.com/Some%20Folder/BigFile.mov
我有这个片段来清理 URL 的 %20
和服务器部分:
echo | 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
,这样我就可以使用原来的URL:
lget "sftp://ftp.example.com/Some%20Folder/BigFile.mov"
这里的解决方案应该是这样的
alias lget='function _lget(){ lftp ... };_lget'
但是我完全不知道如何在函数中包含参数,如何通过 sed
处理它,以及如何处理嵌套的引号。
我可能需要一些反引号...
是这样的吗?
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
。 (在 POSIX shell 中可用 ${variable#prefix}
语法来检索删除前缀的变量的值。哦,为了记录,单个 sed
脚本可以执行多次替换;sed -e 's/foo/bar/' -e 's/baz/quux/g'
.)
我正在尝试编写一个 bash alias/function,它采用 ftp 路径和 运行s lftp
到 pget
文件。
给定一个远程路径,空格编码为 %20
,例如:
sftp://ftp.example.com/Some%20Folder/BigFile.mov
我有这个片段来清理 URL 的 %20
和服务器部分:
echo | 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
,这样我就可以使用原来的URL:
lget "sftp://ftp.example.com/Some%20Folder/BigFile.mov"
这里的解决方案应该是这样的
alias lget='function _lget(){ lftp ... };_lget'
但是我完全不知道如何在函数中包含参数,如何通过 sed
处理它,以及如何处理嵌套的引号。
我可能需要一些反引号...
是这样的吗?
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
。 (在 POSIX shell 中可用 ${variable#prefix}
语法来检索删除前缀的变量的值。哦,为了记录,单个 sed
脚本可以执行多次替换;sed -e 's/foo/bar/' -e 's/baz/quux/g'
.)