初めてユーザーファイルを古いシステムから新しいシステムに移動しています。私の目標は、単純な構文のために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つ以上の他の文字と一致し、点と点以外の.[!.]
文字と一致します。正規表現では*
意味?
が若干異なります。)