/コピーされたコンテンツフォルダの違い。そして/ * Linuxでは

/コピーされたコンテンツフォルダの違い。そして/ * Linuxでは

私が読んだフォルダからコンテンツをコピーするには、次のようにします。

cp -rfva ../foldersource/. ./

しかしこれも効果がある

cp -rfva ../foldersource/* ./

違いはありますか?

たとえば、次のようにファイルを起動したい場合:

rm -rf ../foldersource/.

エラーが発生します。

rm:  rejet delete folder '.' or '..':

しかし、アスタリスクだけを撮ってください。

rm -rf ../foldersource/*

それでは、Asteriskはどこでも良い選択でしょうか?

答え1

この2つの形態の議論には根本的な違いがあります。何が起こっているのかを理解することが重要です。

引数はそれであれ他で../foldersource/.あれ、変更​​されずにコマンドに渡されます。単にディレクトリを指す標準のUnixルールとは異なり、末尾の点が特別な意味を持つかどうかは、コマンドによって異なります。cprmrmcp

まず、../foldersource/*シェルによって拡張されました。今後コマンドは引数が渡​​されても実行されます。したがって、拡張バージョンなどはrm見たことがありません。オペレーティングシステムでは、コマンドに渡すことができる引数の数は通常数百に制限されるため、これは重要です。../foldersource/*../foldersource/file1.ext ../foldersource/file2.ext ../foldersource/childfolder1

答え2

コピーを使用すると、ほとんどのファイルとディレクトリがからにcp -a source/* target/コピーされます。特に除外されたエントリは、トップレベルの.txtファイルがドット()で始まるファイルです。sourcetarget.source

次のファイル(またはディレクトリ)を検討してください。source

apple        # will be copied
banana/      # will be copied, as will all its contents
.cherry      # will not be copied

cp -a source/. target/以下を使ってコピーするsource場合.target

次のファイル(またはディレクトリ)を検討してください。source

apple        # will be copied
banana/      # will be copied, as will all its contents
.cherry      # will be copied

を使用すると、次のことができますbashzshdotglobオプション*ドットで始まるファイルとディレクトリを含めるようにセマンティクスを変更します(オプションもyashありますが、dotglobglob拡張に.およびを含むため、..ユーザビリティが制限されます。を参照FIGNORE='@(.|..)'ksh93

興味深いことにcp -a source/. target/保証があります。いいえコンポーネントを作成しますtarget/source。 (一方、すでに存在するcp -a source target/かどうかに応じて、2つのうちの1つが実行されますtarget等しい方法でcpを使用してフォルダを再帰的にコピーする方法もっと学ぶ。 )


削除を使用すると、rm -rf source/*ドット()で始まらないファイルとディレクトリを削除します。すでに述べた設定によって異なります。ディレクトリ自体は削除されません。source.dotglobsource

これを使用して削除しようとするとrm -rf source/.失敗します。他の人たちはすでに説明しています。- POSIXは、最後のコンポーネント.がまたはインパス削除を禁止するためです..。最も近いのは、ドット()で始まるかどうかに関係なく、ディレクトリとすべての内容をrm -rf source削除することです。source.

答え3

このマニュアルには次のように明確に記載されているため、許可されていないため、rm -rf ../foldersource/.これを行うことはできません。rm

最後のファイル名部分が '.'または、「..」のファイルを削除しようとすると、POSIXで指定されているようにプロンプ​​トなしで拒否されます。

POSIX マニュアルにはman 1p rm次のようなものがあります。

ファイルポイントまたはドットポイント(dot-dot)がオペランドのデフォルト名部分(つまり、最終パス名部分)として指定されている場合、またはオペランドがルートディレクトリとして解決される場合、rmは標準エラーに診断メッセージを書き、何もしないでください。 。

関連情報