我想定期将文件放在我的网络服务器的/ tmp目录中进行分享.令人讨厌的是每当我scp文件时我都必须设置权限.根据另一个问题的建议,我编写了一个复制文件的脚本,设置权限然后打印URL:
#!/bin/bash
scp "$1" SERVER:"/var/www/tmp/$1"
ssh SERVER chmod 644 "/var/www/tmp/$1"
echo "URL is: http://SERVER/tmp/$1"
Run Code Online (Sandbox Code Playgroud)
当我用我的实际主机替换SERVER时,一切都按预期工作......直到我用包含空格的参数执行脚本.虽然我怀疑解决方案可能是使用$ @我还没弄明白如何让间隔文件名工作.
事实证明,所需要的是逃避将被发送到远程服务器的路径.Bash认为SERVER中的引号:"/ var/www/tmp/$ 1"与$ 1相关,并将它们从最终输出中删除.如果我尝试运行:
tmp-scp.sh Screen\ shot\ 2010-02-18\ at\ 9.38.35\ AM.png
Run Code Online (Sandbox Code Playgroud)
回应我们看到它正在尝试执行:
scp SERVER:/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png
Run Code Online (Sandbox Code Playgroud)
如果引号是转义文字,那么scp命令看起来更像你期望的:
scp SERVER:"/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png"
Run Code Online (Sandbox Code Playgroud)
通过添加一些代码来截断路径,最终脚本变为:
#!/bin/bash
# strip path
filename=${1##*/}
fullpath="$1"
scp "$fullpath" SERVER:\"/var/www/tmp/"$filename"\"
echo SERVER:\"/var/www/tmp/"$filename"\"
ssh SERVER chmod 644 \"/var/www/tmp/"$filename"\"
echo "URL is: http://SERVER/tmp/$filename"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11505 次 |
| 最近记录: |