gpt4 book ai didi

bash - 在 bash 中使用带空格的文件名和 scp 和 chmod

转载 作者:行者123 更新时间:2023-11-29 09:32:22 30 4
gpt4 key购买 nike

我喜欢定期将文件放在我的网络服务器的/tmp 目录中以便共享。令人讨厌的是,每当我对文件进行 scp 时,我都必须设置权限。遵循 another question 的建议我写了一个脚本来复制文件,设置权限,然后打印 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"

当我将 SERVER 替换为我的实际主机时,一切都按预期工作......直到我使用包含空格的参数执行脚本。尽管我怀疑解决方案可能是使用 $@,但我还没有弄清楚如何让带空格的文件名起作用。

最佳答案

原来需要的是转义发送到远程服务器的路径。 Bash 认为 SERVER:"/var/www/tmp/$1"中的引号与 $1 相关,并将它们从最终输出中删除。如果我尝试运行:

tmp-scp.sh Screen\ shot\ 2010-02-18\ at\ 9.38.35\ AM.png

回显我们看到它正在尝试执行:

scp SERVER:/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png

如果引号是转义文字,则 scp 命令看起来更像您期望的那样:

scp SERVER:"/var/www/tmp/Screen shot 2010-02-18 at 9.38.35 AM.png"

通过添加一些代码来截断最终脚本的路径:

#!/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"

关于bash - 在 bash 中使用带空格的文件名和 scp 和 chmod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2399724/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com