ความสำคัญของ dot ในคำสั่ง bash คืออะไรและแตกต่างจากเครื่องหมายดอกจันอย่างไร


11

ฉันพยายามที่จะเข้าใจความสำคัญของจุดในการทุบตีและวิธีการที่แตกต่างจากดอกจัน ใครบางคนช่วยอธิบายรายละเอียดได้ไหม? ตัวอย่างเช่นอะไรคือความแตกต่างระหว่างcp -ar /foo/. /foo2/และcp -pr /foo/* /foo2/

คำตอบ:


12

จุด ( .) เป็นเพียง.ไดเรกทอรีภายในไดเรกทอรีซึ่งเหมือนกับไดเรกทอรี ( ls -la /fooจะแสดงให้คุณเห็น) ดังนั้นหากคุณคัดลอกfoo/.ที่อื่นคุณจะคัดลอกแผนผังทั้งหมดด้านล่างอย่างมีประสิทธิภาพfooโดยไม่ต้องคัดลอกfooตัวเอง (คุณกำลังคัดลอกต้นไม้foo2/.ที่เหมือนกันfoo2)

/foo/*ถูกขยายโดยเชลล์ไปยังรายการของไฟล์และไดเรกทอรีที่ไม่ได้ซ่อนไว้/fooดังนั้นมันจะคัดลอกโครงสร้างไดเรกทอรีเดียวกันภายใต้/fooลง/foo2ในด้วยเช่นกันยกเว้นสำหรับ dotfiles / dotdirs cpจะได้รับข้อโต้แย้งมากมายอย่างมีประสิทธิภาพ หากรายการมีขนาดใหญ่เกินไปก็อาจทำให้การดำเนินการของcpล้มเหลว


ขออภัยที่ฉันสับสน ดังนั้นโดยธรรมชาติเครื่องหมายดอกจันทำให้คำสั่งซ้ำ? กล่าวอีกนัยหนึ่งcp -r /foo/*ก็ทำเช่นเดียวกันcp /foo/* ?
Mike B

5
@MikeB, ไม่, เชลล์จะขยายรายการไฟล์ในไดเร็กทอรี / foo เท่านั้น มันไม่เปลี่ยนพฤติกรรมของ cp ใช้set -xหรือecho cp -pr /foo/* /foo2เพื่อดูว่าเกิดอะไรขึ้น สิ่งสำคัญคือการตระหนักว่ามันเป็นเชลล์ที่ขยาย wildcard cpไม่เห็นดาว
Stéphane Chazelas

แล้วเรื่องนี้ล่ะ chmod 755 -R กับ chmod 755 -R *
wayofthefuture
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.