ฉันพยายามที่จะเข้าใจความสำคัญของจุดในการทุบตีและวิธีการที่แตกต่างจากดอกจัน ใครบางคนช่วยอธิบายรายละเอียดได้ไหม? ตัวอย่างเช่นอะไรคือความแตกต่างระหว่างcp -ar /foo/. /foo2/และcp -pr /foo/* /foo2/
ฉันพยายามที่จะเข้าใจความสำคัญของจุดในการทุบตีและวิธีการที่แตกต่างจากดอกจัน ใครบางคนช่วยอธิบายรายละเอียดได้ไหม? ตัวอย่างเช่นอะไรคือความแตกต่างระหว่างcp -ar /foo/. /foo2/และcp -pr /foo/* /foo2/
คำตอบ:
จุด ( .) เป็นเพียง.ไดเรกทอรีภายในไดเรกทอรีซึ่งเหมือนกับไดเรกทอรี ( ls -la /fooจะแสดงให้คุณเห็น) ดังนั้นหากคุณคัดลอกfoo/.ที่อื่นคุณจะคัดลอกแผนผังทั้งหมดด้านล่างอย่างมีประสิทธิภาพfooโดยไม่ต้องคัดลอกfooตัวเอง (คุณกำลังคัดลอกต้นไม้foo2/.ที่เหมือนกันfoo2)
/foo/*ถูกขยายโดยเชลล์ไปยังรายการของไฟล์และไดเรกทอรีที่ไม่ได้ซ่อนไว้/fooดังนั้นมันจะคัดลอกโครงสร้างไดเรกทอรีเดียวกันภายใต้/fooลง/foo2ในด้วยเช่นกันยกเว้นสำหรับ dotfiles / dotdirs cpจะได้รับข้อโต้แย้งมากมายอย่างมีประสิทธิภาพ หากรายการมีขนาดใหญ่เกินไปก็อาจทำให้การดำเนินการของcpล้มเหลว
set -xหรือecho cp -pr /foo/* /foo2เพื่อดูว่าเกิดอะไรขึ้น สิ่งสำคัญคือการตระหนักว่ามันเป็นเชลล์ที่ขยาย wildcard cpไม่เห็นดาว
cp -r /foo/*ก็ทำเช่นเดียวกันcp /foo/*?