"scp 10.0.0.11:/home/someuser/.*"も/homeからコピーを開始するのはなぜですか?

"scp 10.0.0.11:/home/someuser/.*"も/homeからコピーを開始するのはなぜですか?

初めてユーザーファイルを古いシステムから新しいシステムに移動しています。私の目標は、単純な構文のためにSCPを使用することですscp -r source destination。まず、次のコマンドを使用してファイルをコピーしようとしました。

scp -r [email protected]:/home/someuser/* .

振り返ってみると、過去の経験に基づいてこの.問題を解決するために、次のようにしました。

scp -r [email protected]:/home/someuser/.* .

で始まるすべての項目を表すワイルドカード文字です.。明らかに(私がこの質問をする理由は)私が望む効果を得ることはできません。観察されたのは、.パス内の1つ上のレベルに移動すると解釈され、/home/*作業ディレクトリ自体ではなく、自分の作業ディレクトリの上にファイルをコピーして配置し始めたことです。

2番目のコマンドの実行に関する私の解釈は正しいですか?入るやいなや直しやすそうで~/backup一段階アップグレードしましたね~rm -rf ~/someuserコマンドを中断する前に各ユーザー名をコピーしました。このsomeuserディレクトリは次の場所になければなりません。~/backup

その後、ディレクトリに含まれているファイルではなく、ディレクトリのみを指定して目的のファイルをコピーする方法を学びました。

答え1

1レベル以上ではなく、.シェルのパターンマッチング構文では、*すべての文字数を意味するため、..各ディレクトリに存在するものと一致し、次のものを指します。ls .*Bashや他のいくつかのシェルを使って同じ効果を得ることができます。

特別なアイテムをマッチングするのは.*痛く、.決して..役に立ちません。アイテム.??* .[!.]内の明示的なナビゲーションなど、見苦しい解決策を使用している人を見ることもできます..(*)

幸いなことに、いくつかのよりスマートなシェルは、globの結果からこれらの両方を削除します。 zshはおそらく最も顕著ですが、唯一のものではありません。 (少なくともBash開発バージョンにもこのglobskipdotsオプションがあります。)

この特別なケースでは、SSHサーバーはglobを拡張するため、より複雑ですが、根本的な原因は同じであると予想されます。

(*は.??*点と2つ以上の他の文字と一致し、点と点以外の.[!.]文字と一致します。正規表現では*意味?が若干異なります。)

関連情報