cp -R foo /とcp -R foo / *の違いは何ですか


2

私はコマンドを使用するたびに気づいcp -R foo/*私のようなファイル以外のすべてをコピーする.envか、おそらく.gitignore

解決策はcp -R foo/、ディレクトリ全体を処理するために使用することですが、これは、*文字を使用する動作をまだ理解していないという事実を変更しません。

*キャラクターが次のようなファイルをキャッチしないのはなぜ.envですか?

OSはDebianです

回答:


5
  • cp -R foo/ すべてを再帰的にコピーします foo/
  • cp -R foo/*は、一致するすべてのファイルとディレクトリを再帰的にコピーしますfoo/*。デフォルトでは、ドット付きの名前は含まれません(ls *リストに表示されません)。これについては、ここで説明します(主要なドットに関するその他の詳細も同様)。

先頭にドットが付いたファイルの処理に加えて、別の違いはcp -R foo/*、個々のファイルとディレクトリをfoo/ターゲットディレクトリにcp -R foo/コピーfoo/し、ターゲットディレクトリにコピーを作成することです(もう1つのディレクトリレベルを取得します)。


3

デフォルトでは、bashのglobbingには、で始まるファイル名は含まれません。. したがって、指定*すると、「.」で始まるファイルなしで再帰的にコピーするように求められます。指定しない場合*、「.」ファイルを含むすべてをコピーします。


あなたが言っていることは、私が書いたものに基づいていますが、これはどのドキュメントでも指定されていませんでした「cd *」を指定した場合、「cda」、「cdrom」、「cdrecord」、および「cd」自体も含む「cd」で始まるすべての文字列が使用されます。 、mull、ml、およびmで始まりlで終わるものすべて」。
バートウォミエジソビエシェク

同じ詳細については以下を確認してください
ヴィシャル・シンデ

男7グロブ.....
ヴィスハルシンデ

提案として、rsyncを使用して、ドットファイルやドットディレクトリを含むすべてをコピーできます。
パウロ

スーパーユーザーとしてこれを行う*場合、ファイルは通常から隠されていないため、ドットファイルはによってピックアップされることを指摘したいと思いますroot
ネビンウィリアムズ

2

あなたが持っている他の回答に加えて、他の例がいくつかありますfoo/し、foo/*異なる可能性があるが(ただで始まるファイルではありません.)。また、.globで始まるファイルを作成したい場合は、で有効にすることもできますshopt -s dotglob

最初はそこにエントリがない場合でfoo/、あなたが有効になっていないnullglob、その後foo/*に渡されたリテラルとして返されますcp。(この場合)foo/* cp文句を言うソースはないため、cp -R foo/常にfoo/コピーする必要があります。あなたが有効なかった場合nullglob、その後foo/*、あなたがに引数が欠落してしまうと思いますので、何にも拡大しますcp

考慮する別のケースはにたくさんのエントリーがあるならfoo/です。シェルはグロブを展開してからプロセスを呼び出しますが、グロブがあまりにも多くの引数に展開されると、エラーが発生します。ではcp -R foo/(おそらくあなたはどこかにターゲットがあるでしょうが)あなただけ2つの引数を持っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.