ฉันพยายามที่จะเข้าใจความสำคัญของจุดในการทุบตีและวิธีการที่แตกต่างจากดอกจัน ใครบางคนช่วยอธิบายรายละเอียดได้ไหม? ตัวอย่างเช่นอะไรคือความแตกต่างระหว่าง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/*
?