Kopyalama sırasında * ve *. * Arasındaki fark nedir?


19

Aşağıdaki 2 komut arasındaki fark nedir?

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

12
Her iki cevap da doğru olsa da, dikkat edilmesi gereken bir şey olduğunu düşünüyorum. Gizli dosyalar ( .like ile başlayan dosyalar .bashrc) bu komutların hiçbiriyle kopyalanmaz. Bu dosyaları kopyalamak için açıkça belirtmelisiniz ki .*, tüm dosyaları (gizli olanlar da dahil olmak üzere) kopyalamak için komutuncp -rp /dir1/.* /dir1/* /dir2/
YoMismo

Kısacası, *.*MS-DOS / Windows yolu *UNIX / Linux yolu. Unix son ekinde (dosya sonlandırmada, .- like .txtveya .jpg) öğesinden sonraki bölüm isteğe bağlıdır ... MS-DOS'ta .(nokta) ve sonek gerekliydi, bu nedenle tüm dosyaları eşleştirmek için bir tane kullanıldı *.*- tüm metin dosyalarını eşleştirmek için , biri kullanacaktı *.txt.
Baard Kopperud

@BaardKopperud soneki gerekmiyordu, FILENAMEhatta gibi bir ada sahip dosyalar olabilir FILE.
Ruslan

1
@Ruslan ama *.*DOS hala adlandırılmış dosyaları maçları FILENAMEveya FILEadı 'gerçekten' olduğundan, FILENAME.ya FILE.(boş bir uzantılı). Unix yılında adı 'gerçekten' olduğu FILENAMEya da FILEöylesine, *.*uymaz.
Jonathan Cast

1
@Ruslan Gerçek DOS'ta gerekliydi, artık pencerelerde gerekli değil. Geri içinde eski günleri , tek *tek eşleşir FILEve değil FILE.TXT .
Random832

Yanıtlar:


25

*.*yalnızca ortasında veya sonunda bir nokta bulunan dosya adlarıyla eşleşir. Örneğin:

abc.jpg
def. 

*yukarıdaki dosya adlarıyla ve nokta içermeyen adlarla eşleşir. Örneğin:

data

6
Belki de anti-deyim *.*8 + 3 dosya adları gün içinde MS-DOS tüm dosyaları eşleştirmek için doğru yol olduğunu unutmayın . MS-DOS'ta nokta zorunludur (uzantısı olmayan dosyalar için örtük de olsa).
üçlü

11
@ Mark, Hayır, sanmıyorum. üzerinde dotglob yoksa.
David Dai

11
Ha, bu *.*maçları hiç fark etmedim foo.ama yapmadım .foo. Bu asimetri korkunç.
jamesdlin

9
@jamesdlin, bash kılavuzundan: Dosya adı genişletmesi için bir desen kullanıldığında, '.' karakteri. bir dosya adının başlangıcında veya bir eğik çizgiyi hemen izleyen kabuk seçeneği dotglob ayarlanmadığı sürece açıkça eşleştirilmelidir.
David Dai

1
@jamesdlin. Unix'in 1. gününden bu yana (1969 dolaylarında), nokta ile başlayan dizin girişleri gizli kabul edildi . Başlangıçta bu, herhangi bir dizinde (boş dizinler) her zaman var olan .(geçerli dizin) ve ..(üst dizin) girişlerini atlamak için gerekliydi . Ritchie ve Thompson daha sonra tüm .*rcyapılandırma dosyalarını gizlemenin (varsayılan olarak) yararlı bir özellik olduğunu düşündüler ve tüm bu (öncü nokta) "gizli" girdileri görüntülemek için açık bir -aseçenek eklediler ls. Bu yüzden Unix tarihini bilmek çok da şaşırtıcı değil. Unix'te lider nokta "sonsuza dek" den bu yana özel olmuştur.
arielf

13

Diyelim ki aşağıdaki dosyalarınız var /dir1:

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

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

Bu komut yalnızca aşağıdaki dosyaları kopyalar:

foo.bar  
fo.ba  
foo1.bar2 

cp -rp /dir1/* /dir2/

Bu işlem, içindeki tüm dosyaları kopyalar. /dir1

Koşul, alt dizinler için de geçerlidir /dir1.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.