コピー中の*と*。*の違いは何ですか?


19

次の2つのコマンドの違いは何ですか?

cp -rp /dir1/*.* /dir2/
cp -rp /dir1/* /dir2/

12
両方の答えが正しい場合でも、注意すべきことが1つあると思います。隠しファイル(.like で始まるファイル.bashrc)は、これらのコマンドのいずれでもコピーされません。これらのファイルをコピーするには、その.*ようにして、すべてのファイル(隠しファイルを含む)をコピーするコマンドがcp -rp /dir1/.* /dir1/* /dir2/
YoMismo

手短に言えば*.*、MS-DOS / Windowsのやり方です*が、UNIX / Linuxのやり方です。Unixの接尾辞(ファイル終わり、後の部分では.-のような.txtまたは.jpgオプションである...でMS-DOS) .(ドット)と接尾辞は、すべてのファイル、使用されたものと一致するので、必要とされた*.*-すべてのテキスト・ファイルに一致するようにしながら、 、を使用します*.txt
バールドコッペルード

@BaardKopperudサフィックスは必要ありませんでした。FILENAMEまたはのような名前のファイルが存在することもありましたFILE
ルスラン

1
@Ruslanが、*.*DOSには、まだ名前のファイルに一致するFILENAMEか、FILE名前が「本当に」ですので、FILENAME.またはFILE.(空の拡張子を持ちます)。Unixでは、名前は「本当に」FILENAMEまたはFILEであるため、*.*一致しません。
ジョナサンキャスト

1
@Ruslan実際のDOSでは必須でしたが、Windowsでは不要になりました。戻る、単一は*唯一一致しFILE、そしてません FILE.TXT
Random832

回答:


25

*.*中央または末尾にドットがあるファイル名のみに一致します。例えば:

abc.jpg
def. 

*上記のファイル名に加えて、ドットがまったくない名前に一致します。例えば:

data

6
また、アンチイディオム*.*は、8 + 3のファイル名の時代にMS-DOS上のすべてのファイルを一致させる正しい方法であったことに注意してください。MS-DOSでは、ドットは必須です(拡張子のないファイルでは暗黙的ですが)。
トリプリー

11
@マーク、いいえ、そうは思いません。ドットグロブがオンになっていない限り。
デビッドダイ

11
ええと、私はそれが*.*一致しないことに気づいたことfoo.はありません.foo。その非対称性はひどいです。
ジェームズドリン

9
bashマニュアルの@jamesdlin:パターンがファイル名の展開に使用される場合、文字「。」シェルオプションdotglobが設定されていない限り、ファイル名の先頭またはスラッシュの直後に明示的に一致する必要があります。
デビッドダイ

1
@jamesdlin。Unixの1日目(1969年頃)以降、ドットで始まるディレクトリエントリは非表示と見なされていました。もともとこれは、任意のディレクトリに常に存在する.(現在のディレクトリ)および..(親ディレクトリ)エントリ(空のディレクトリでも)をスキップするために必要でした。リッチーとトンプソンは後に、すべての構成.*rcファイルを非表示にする(デフォルトで)便利な機能であると見なし、これらの(先頭のドット)エントリをすべて表示する明示的な-aオプションを追加しましたls。したがって、これはUnixの歴史を知っていてもそれほど驚くことではありません。Unixの主要なドットは、「永遠に」以来特別なものです。
arielf

13

に次のファイルがあるとします/dir1

foobar  
foo.bar  
fo.ba  
foo1.bar2  
foobar1  
foobar2  

cp -rp /dir1/*.* /dir2/

このコマンドは、次のファイルのみをコピーします。

foo.bar  
fo.ba  
foo1.bar2 

cp -rp /dir1/* /dir2/

これにより、すべてのファイルがコピーされます /dir1

条件はサブディレクトリに/dir1も適用されます。

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