私が読んだフォルダからコンテンツをコピーするには、次のようにします。
cp -rfva ../foldersource/. ./
しかしこれも効果がある
cp -rfva ../foldersource/* ./
違いはありますか?
たとえば、次のようにファイルを起動したい場合:
rm -rf ../foldersource/.
エラーが発生します。
rm: rejet delete folder '.' or '..':
しかし、アスタリスクだけを撮ってください。
rm -rf ../foldersource/*
それでは、Asteriskはどこでも良い選択でしょうか?
答え1
この2つの形態の議論には根本的な違いがあります。何が起こっているのかを理解することが重要です。
引数はそれであれ他で../foldersource/.
あれ、変更されずにコマンドに渡されます。単にディレクトリを指す標準のUnixルールとは異なり、末尾の点が特別な意味を持つかどうかは、コマンドによって異なります。cp
rm
rm
cp
まず、../foldersource/*
シェルによって拡張されました。今後コマンドは引数が渡されても実行されます。したがって、拡張バージョンなどはrm
見たことがありません。オペレーティングシステムでは、コマンドに渡すことができる引数の数は通常数百に制限されるため、これは重要です。../foldersource/*
../foldersource/file1.ext ../foldersource/file2.ext ../foldersource/childfolder1
答え2
コピーを使用すると、ほとんどのファイルとディレクトリがからにcp -a source/* target/
コピーされます。特に除外されたエントリは、トップレベルの.txtファイルがドット()で始まるファイルです。source
target
.
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
を使用すると、次のことができますbash
。zsh
dotglob
オプション*
ドットで始まるファイルとディレクトリを含めるようにセマンティクスを変更します(オプションもyash
ありますが、dotglob
glob拡張に.
およびを含むため、..
ユーザビリティが制限されます。を参照FIGNORE='@(.|..)'
)ksh93
。
興味深いことにcp -a source/. target/
保証があります。いいえコンポーネントを作成しますtarget/source
。 (一方、すでに存在するcp -a source target/
かどうかに応じて、2つのうちの1つが実行されますtarget
。等しい方法でcpを使用してフォルダを再帰的にコピーする方法もっと学ぶ。 )
削除を使用すると、rm -rf source/*
ドット()で始まらないファイルとディレクトリを削除します。すでに述べた設定によって異なります。ディレクトリ自体は削除されません。source
.
dotglob
source
これを使用して削除しようとするとrm -rf source/.
失敗します。他の人たちはすでに説明しています。- POSIXは、最後のコンポーネント.
がまたはインパス削除を禁止するためです..
。最も近いのは、ドット()で始まるかどうかに関係なく、ディレクトリとすべての内容をrm -rf source
削除することです。source
.
答え3
このマニュアルには次のように明確に記載されているため、許可されていないため、rm -rf ../foldersource/.
これを行うことはできません。rm
最後のファイル名部分が '.'または、「..」のファイルを削除しようとすると、POSIXで指定されているようにプロンプトなしで拒否されます。
POSIX マニュアルにはman 1p rm
次のようなものがあります。
ファイルポイントまたはドットポイント(dot-dot)がオペランドのデフォルト名部分(つまり、最終パス名部分)として指定されている場合、またはオペランドがルートディレクトリとして解決される場合、rmは標準エラーに診断メッセージを書き、何もしないでください。 。