如何使用 shell 函数 scp 具有令人讨厌的名称的文件夹

如何使用 shell 函数 scp 具有令人讨厌的名称的文件夹

我正在尝试编写一个函数,将其放置在我的所有计算机上,以便轻松地在网络上的固定位置发送文件。

这是到目前为止我的脚本。我的计算机上的某些文件夹可能有重复的名称,因此我在文件夹名称的末尾添加了一个 uuid。

function putOnSG3() {
uuid=`uuidgen`
if [[ -d $1 ]]; then scp -rv "$1" shiny:/Volumes/Seagate3To/"$1.$uuid";
else echo $1 " is not a directory. Not copying.";
fi;
}

我这样调用它:

$ putOnSG testFo\[l\}der

问题是这样的:

zsh:1: bad pattern: /Volumes/Seagate3To/testFo[l}der.d84abc26-501b-4f89-a636-518b4059a770

我该如何管理这些讨厌的文件名?

目标文件系统是区分大小写的 hfsplus,源文件系统是来自 Linux 机器和 NTFS 的各种 extf。

答案1

这是一个可行的解决方案:

function putOnSG() {
uuid=`uuidgen`
if [[ -d $1 ]]; then du -sh "$1";
scp -rv "$1" shiny:/Volumes/Seagate3To/\"$1\".$uuid
else echo $1 "is not a directory. Not copying.";
fi;
}

与我最初的无效解决方案的唯一区别是 scp 第二个参数中引号周围的反斜杠。

答案2

所有特殊符号,如 [、]、(、)、# 等,都应该写在反斜杠“\”之后。你可以尝试这样做:

$ touch test\[ ; ll test\[ ;
-rw-r--r-- 1 s.gvozdetskiy s.gvozdetskiy 0 Dec 12 12:00 test[
$ mkdir test\[ ; ll ./
...
drwxr-xr-x 2 s.gvozdetskiy s.gvozdetskiy     4096 Dec 12 12:04 test[
...

我认为 hfsplus 支持有具体的。

相关内容