如何使用 shell 脚本上的 scp 复制到命名为 space 的文件夹?
How to copy using scp on shell script to folders space named?
大家好,我正在开发这个通过 SSH 连接到 Raspberry Pi 的应用程序。我使用 NSTask 和 NSPipe 以及 shell 脚本通过 Mac 应用程序 GUI 执行 shell 命令。
问题是,当我想使用 "scp" 命令进行复制时,出现 "No such file or directory" 错误,文件夹名称中包含空格。如果路径是“/Users/home/Desktop/New Files/”不工作,但如果“/Users/home/Desktop/New Files/”工作正常。
应用程序必须能够同时使用,分离的命名文件夹和不分离的文件夹,但我只是不知道该怎么做。
这是我的 shell 脚本命令:
#!/bin/bash
/usr/bin/ssh pi@192.168.25.144 \
/usr/bin/scp /home/pi/"" home@192.X.X.X:/Users/home/Documents/New Files/
ip 上的 "X" 是故意删除的,它不是真正的代码。
所以,有人可以帮忙吗????
在路径两边加上“”。
$ mkdir 1 1
mkdir: 1: File exists
$ mkdir "1 1"
$ ll
drwxr-xr-x 2 mikael staff 68 May 21 22:35 1
drwxr-xr-x 2 mikael staff 68 May 21 22:36 1 1
尝试使用反斜杠转义空格:
home@192.X.X.X:/Users/home/Documents/New\ Files/
这很棘手,因为它需要多级转义。
首先从实际路径入手:
home@192.X.X.X:/Users/home/Documents/New Files/
现在为 shell 转义它:
"home@192.X.X.X:/Users/home/Documents/New Files/"
现在为 scp 转义它,因为 scp 接受 shell glob 模式而不是文件名:
/usr/bin/scp /home/pi/"" "home@192.X.X.X:/Users/home/Documents/New\ Files/"
现在为 ssh 转义它,因为 ssh 将在 shell:
中评估它
/usr/bin/ssh pi@192.168.25.144 \
/usr/bin/scp /home/pi/"" \
'"home@192.X.X.X:/Users/home/Documents/New\ Files/"'
这处理了 "New Files" 部分,但我们也尝试对“${1}”参数做一些事情:
/usr/bin/ssh pi@192.168.25.144 \
/usr/bin/scp /home/pi/"$(printf "%q" "")" \
'"home@192.X.X.X:/Users/home/Documents/New\ Files/"'
这是一个完整的、独立的上述示例,通过本地主机两次:
#!/bin/bash
cd ~
mkdir "New Files"
touch "my file"
set -- "my file" # Assign ="my file"
/usr/bin/ssh localhost \
/usr/bin/scp "$(printf "%q" "")" \
'"localhost:New\ Files/"'
find "New Files" -type f
输出显示它确实通过 ssh 通过 scp 复制了一个带空格的文件到带空格的目录:
New Files/my file
由于多级转义很棘手,如果您有任何问题,请务必先尝试这个独立的示例而不进行修改,然后再断定它不起作用。
大家好,我正在开发这个通过 SSH 连接到 Raspberry Pi 的应用程序。我使用 NSTask 和 NSPipe 以及 shell 脚本通过 Mac 应用程序 GUI 执行 shell 命令。
问题是,当我想使用 "scp" 命令进行复制时,出现 "No such file or directory" 错误,文件夹名称中包含空格。如果路径是“/Users/home/Desktop/New Files/”不工作,但如果“/Users/home/Desktop/New Files/”工作正常。
应用程序必须能够同时使用,分离的命名文件夹和不分离的文件夹,但我只是不知道该怎么做。
这是我的 shell 脚本命令:
#!/bin/bash
/usr/bin/ssh pi@192.168.25.144 \
/usr/bin/scp /home/pi/"" home@192.X.X.X:/Users/home/Documents/New Files/
ip 上的 "X" 是故意删除的,它不是真正的代码。
所以,有人可以帮忙吗????
在路径两边加上“”。
$ mkdir 1 1
mkdir: 1: File exists
$ mkdir "1 1"
$ ll
drwxr-xr-x 2 mikael staff 68 May 21 22:35 1
drwxr-xr-x 2 mikael staff 68 May 21 22:36 1 1
尝试使用反斜杠转义空格:
home@192.X.X.X:/Users/home/Documents/New\ Files/
这很棘手,因为它需要多级转义。
首先从实际路径入手:
home@192.X.X.X:/Users/home/Documents/New Files/
现在为 shell 转义它:
"home@192.X.X.X:/Users/home/Documents/New Files/"
现在为 scp 转义它,因为 scp 接受 shell glob 模式而不是文件名:
/usr/bin/scp /home/pi/"" "home@192.X.X.X:/Users/home/Documents/New\ Files/"
现在为 ssh 转义它,因为 ssh 将在 shell:
中评估它/usr/bin/ssh pi@192.168.25.144 \
/usr/bin/scp /home/pi/"" \
'"home@192.X.X.X:/Users/home/Documents/New\ Files/"'
这处理了 "New Files" 部分,但我们也尝试对“${1}”参数做一些事情:
/usr/bin/ssh pi@192.168.25.144 \
/usr/bin/scp /home/pi/"$(printf "%q" "")" \
'"home@192.X.X.X:/Users/home/Documents/New\ Files/"'
这是一个完整的、独立的上述示例,通过本地主机两次:
#!/bin/bash
cd ~
mkdir "New Files"
touch "my file"
set -- "my file" # Assign ="my file"
/usr/bin/ssh localhost \
/usr/bin/scp "$(printf "%q" "")" \
'"localhost:New\ Files/"'
find "New Files" -type f
输出显示它确实通过 ssh 通过 scp 复制了一个带空格的文件到带空格的目录:
New Files/my file
由于多级转义很棘手,如果您有任何问题,请务必先尝试这个独立的示例而不进行修改,然后再断定它不起作用。