名前の面倒なフォルダにシェル関数scpを使用する方法

名前の面倒なフォルダにシェル関数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番目のパラメータの引用符の周りのバックスラッシュでした。

答え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の具体的なサポートがあると思います。

関連情報