私はコマンドを使用するたびに気づいcp -R foo/*
私のようなファイル以外のすべてをコピーする.env
か、おそらく.gitignore
解決策はcp -R foo/
、ディレクトリ全体を処理するために使用することですが、これは、*
文字を使用する動作をまだ理解していないという事実を変更しません。
*
キャラクターが次のようなファイルをキャッチしないのはなぜ.env
ですか?
OSはDebianです
私はコマンドを使用するたびに気づいcp -R foo/*
私のようなファイル以外のすべてをコピーする.env
か、おそらく.gitignore
解決策はcp -R foo/
、ディレクトリ全体を処理するために使用することですが、これは、*
文字を使用する動作をまだ理解していないという事実を変更しません。
*
キャラクターが次のようなファイルをキャッチしないのはなぜ.env
ですか?
OSはDebianです
回答:
デフォルトでは、bashのglobbingには、で始まるファイル名は含まれません。.
したがって、指定*
すると、「.
」で始まるファイルなしで再帰的にコピーするように求められます。指定しない場合*
、「.
」ファイルを含むすべてをコピーします。
*
場合、ファイルは通常から隠されていないため、ドットファイルはによってピックアップされることを指摘したいと思いますroot
。
あなたが持っている他の回答に加えて、他の例がいくつかありますfoo/
し、foo/*
異なる可能性があるが(ただで始まるファイルではありません.
)。また、.
globで始まるファイルを作成したい場合は、で有効にすることもできますshopt -s dotglob
。
最初はそこにエントリがない場合でfoo/
、あなたが有効になっていないnullglob
、その後foo/*
に渡されたリテラルとして返されますcp
。(この場合)foo/*
cp
文句を言うソースはないため、cp -R foo/
常にfoo/
コピーする必要があります。あなたが有効なかった場合nullglob
、その後foo/*
、あなたがに引数が欠落してしまうと思いますので、何にも拡大しますcp
。
考慮する別のケースはにたくさんのエントリーがあるならfoo/
です。シェルはグロブを展開してからプロセスを呼び出しますが、グロブがあまりにも多くの引数に展開されると、エラーが発生します。ではcp -R foo/
(おそらくあなたはどこかにターゲットがあるでしょうが)あなただけ2つの引数を持っています。