อะไรคือความแตกต่างระหว่าง * และ *. * ขณะทำการคัดลอก?


19

ความแตกต่างระหว่าง 2 คำสั่งต่อไปนี้คืออะไร?

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

12
แม้ว่าคำตอบทั้งสองจะถูกต้อง แต่ฉันคิดว่ามีสิ่งหนึ่งที่ควรสังเกต ไฟล์ที่ซ่อนอยู่ (แฟ้มที่ขึ้นต้นด้วย.เหมือน.bashrc) จะไม่ได้คัดลอกใด ๆ ของคำสั่งดังกล่าว ในการคัดลอกไฟล์เหล่านั้นคุณควรระบุอย่างชัดเจนว่าหากต้องการคัดลอกไฟล์.*ทั้งหมด (รวมถึงไฟล์ที่ซ่อนอยู่) คำสั่งจะเป็นcp -rp /dir1/.* /dir1/* /dir2/
YoMismo

กล่าวโดยย่อ*.*คือวิธีการทำ MS-DOS / Windows ในขณะที่*เป็นวิธี UNIX / Linux ใน Unix ต่อท้าย (สิ้นสุดไฟล์ส่วนหลัง.- ชอบ.txtหรือ.jpg) เป็นตัวเลือก ... ใน MS-DOS .จำเป็นต้องใช้ (dot) และคำต่อท้ายดังนั้นเพื่อให้ตรงกับไฟล์ทั้งหมดหนึ่งใช้*.*- ในขณะที่ตรงกับไฟล์ข้อความทั้งหมด *.txtหนึ่งจะใช้
Baard Kopperud

@BaardKopperud ต่อท้ายก็ไม่จำเป็นต้องอาจจะมีไฟล์ที่มีชื่อเหมือนหรือแม้กระทั่งFILENAME FILE
Ruslan

1
@Ruslan แต่*.*ใน DOS ยังคงตรงกับชื่อไฟล์FILENAMEหรือFILEเพราะชื่อนั้นเป็น 'จริงๆ' FILENAME.หรือFILE.(ที่มีนามสกุลว่างเปล่า) ใน Unix ชื่อนั้นคือ 'จริงๆ' FILENAMEหรือFILEดังนั้น*.*จะไม่ตรงกัน
Jonathan Cast

1
@ Ruslan มันเป็นสิ่งจำเป็นใน DOS จริงไม่จำเป็นต้องใช้อีกต่อไปใน Windows ย้อนกลับไปในวันเก่าที่เดียว*เท่านั้นที่จะตรงFILEและไม่ได้ FILE.TXT
Random832

คำตอบ:


25

*.*จับคู่ชื่อไฟล์ที่มีจุดอยู่ตรงกลางหรือท้ายที่สุดเท่านั้น ตัวอย่างเช่น:

abc.jpg
def. 

*ตรงกับชื่อไฟล์ด้านบนรวมถึงชื่อที่ไม่มีจุดเลย ตัวอย่างเช่น:

data

6
อาจเป็นไปได้ว่า anti-idiom *.*เคยเป็นวิธีที่ถูกต้องในการจับคู่ไฟล์ทั้งหมดใน MS-DOS ในวันที่ 8 + 3 ชื่อไฟล์ ใน MS-DOS จุดจำเป็นต้องมี (แม้ว่าจะมีความหมายในไฟล์ที่ไม่มีนามสกุล)
tripleee

11
@ Mark, ไม่ฉันไม่คิดอย่างนั้น เว้นแต่ว่าคุณจะมี dotglob
เดวิดได

11
อืมมมผมไม่เคยตระหนักว่า*.*การแข่งขันแต่ไม่foo. .fooความไม่สมดุลนั้นแย่มาก
jamesdlin

9
@jamesdlin จากคู่มือทุบตี: เมื่อใช้รูปแบบสำหรับการขยายชื่อไฟล์อักขระ '.' ที่จุดเริ่มต้นของชื่อไฟล์หรือทันทีหลังจากเครื่องหมายทับจะต้องจับคู่อย่างชัดเจนเว้นแต่ว่าตัวเลือกเปลือก dotglob ตั้งค่า
เดวิดได

1
@jamesdlin ตั้งแต่วันที่ 1 ของระบบปฏิบัติการยูนิกซ์ (ประมาณ 1969), รายการไดเรกทอรีเริ่มต้นด้วยจุดได้รับการพิจารณาซ่อน แต่เดิมนี้จำเป็นต้องข้ามรายการ.(ไดเรกทอรีปัจจุบัน) และ..(ไดเรกทอรีหลัก) ซึ่งมีอยู่เสมอในไดเรกทอรีใด ๆ (แม้แต่ dirs ที่ว่างเปล่า) Ritchie และ Thompson ต่อมาถือว่าเป็นคุณสมบัติที่มีประโยชน์ในการซ่อน (โดยค่าเริ่มต้น) .*rcไฟล์กำหนดค่าทั้งหมดและเพิ่ม-aตัวเลือกที่ชัดเจนlsเพื่อแสดงรายการ "ซ่อน" ทั้งหมดเหล่านี้ (นำหน้าจุด) ดังนั้นนี่จึงไม่น่าประหลาดใจนักที่รู้ประวัติของยูนิกซ์ จุดสำคัญใน 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.