我正在尝试编写一个函数,将其放置在我的所有计算机上,以便轻松地在网络上的固定位置发送文件。
这是到目前为止我的脚本。我的计算机上的某些文件夹可能有重复的名称,因此我在文件夹名称的末尾添加了一个 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 支持有具体的。