วิธีคัดลอกไฟล์รักษาเส้นทางไดเรกทอรีใน Linux?


88

ฉันมีโครงการ Eclipse และไฟล์ ".project" อยู่ในนั้นโครงสร้างไดเรกทอรีดูเหมือนว่า ' myProject/.project' ฉันต้องการคัดลอกไฟล์ '.project' เหล่านี้ไปยังไดเรกทอรีอื่น แต่ฉันต้องการให้ชื่อไดเรกทอรีล้อมรอบถูกเก็บรักษาไว้

สมมติว่าฉันมี ' a/myProject/.project' ฉันต้องการคัดลอก ' myProject/.project' เป็น ' b' ดังนั้นจึงเป็น ' b/myProject/.project' แต่b/myProjectไม่มี '' เมื่อฉันลองใน:

 cp -r ./myProject/.project ../b

คัดลอกเฉพาะไฟล์ '.project' เท่านั้นโดยไม่มีไดเรกทอรี 'myProject' กรุณาแนะนำ

คำตอบ:


153

สวิตช์ที่คุณต้องการคือ--parents:

jim@prometheus:~$ cp --parents test/1/.moo test2/
jim@prometheus:~$ ls -la test2/
total 42
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 .
drwxr-xr-x 356 jim jim 43136 2010-09-14 09:32 ..
drwxr-xr-x   3 jim jim    72 2010-09-14 09:32 test
jim@prometheus:~$ ls -la test2/test/1/.moo
-rw-r--r-- 1 jim jim 0 2010-09-14 09:32 test2/test/1/.moo


7

ใช้tarกับสิ่งที่ชอบ:

mkdir b; tar cpf - myProject/ | tar xpf - -C b/

(ไม่ได้ทดสอบให้มันแห้งก่อนหรือลองในสถานการณ์จำลอง)


ทำงานได้ดีอย่างน่าประหลาดใจ! บน mac: mkdir b; tar -c -f new.tar $ (cat myP); tar -x -f new.tar -C b /; #myP เป็นไฟล์ข้อความที่มีรายการเส้นทางไปยังไฟล์ที่จะคัดลอก
alexey

4

ใช้งานครั้งแรกmkdir -pเพื่อสร้างโฟลเดอร์ปลายทางด้วยการสร้างพา ธ พาเรนต์แบบเรียกซ้ำ จากนั้นคัดลอกเนื้อหาไปยังโฟลเดอร์ปลายทาง:

mkdir -p b/myProject/.project
cp -r a/myProject/.project/file b/myProject/.project

3
cp -P a/myProject/.project b

ดูman cpข้อมูลเพิ่มเติม


ดูเหมือนจะไม่ช่วยอะไร เพียงคัดลอก '.project' โครงการเองไปยัง b แต่ไม่ได้คัดลอก 'myProject'
dhblah

3

ฉันใช้ cpio ร่วมกับการค้นหา คำอธิบายที่นี่

ตัวอย่างสำหรับกรณีการใช้งานของคุณ:

find /a/myProject/.project/ -type f | cpio -p -dumv /b/.

คำสั่งนี้ค้นหาไฟล์ทั้งหมดใน/a/myProject/.project/และคัดลอกขณะที่เก็บรักษาพา ธ ไฟล์ใด ๆ ที่อยู่ภายใน


1
.project เป็นไฟล์ไม่ใช่ dir!
ddbug

1

นอกจาก--parentsนี้ยังจำเป็นต้องเพิ่ม-rตัวเลือกเพื่อหลีกเลี่ยงการคัดลอกไดเรกทอรีภายในส่วนใหญ่

$ cp --parents test/1/.moo test2/
cp: omitting directory ‘test/1/.moo’

ดังนั้นคำสั่งที่ใช้งานได้สำหรับฉันก็คือ

$ cp --parents -r test/1/.moo test2/

0

โปรดระวังว่ามีข้อผิดพลาดเกิดcp --parentsขึ้น เมื่อฉันใช้ --parentsพร้อมกับ--preserve=allวันที่และเวลาแอตทริบิวต์ของไดเรกทอรีปลายทางบางอย่างไม่ได้รับการเก็บรักษาไว้

ลิงค์ต่อไปนี้ดูเหมือนว่าจะยืนยันว่าปัญหานี้เป็นปัญหา: ข้อผิดพลาด # 8767: CP: --preserve = ทั้งหมดไม่ทำงานสำหรับผู้ปกครองเมื่อ --parent ถูกนำมาใช้

ดังนั้นดูเหมือนว่าคุณไม่สามารถเชื่อถือได้กับคุณลักษณะที่ถูกเก็บรักษาไว้เมื่อใช้ --parentsพร้อมกับเช่น--preserve=allหรือ-p


-3

ผมใช้--parentsกับcpคำสั่งและทำงาน perfeclty กับฉัน สำหรับรายละเอียดเพิ่มเติมให้ใช้คู่มือเสมอ ขอขอบคุณ.


3
ไม่ต้องเพิ่มอะไรเลยในอีก 5 คำตอบ
Deer Hunter

ผู้ตอบโปรดทราบว่า. project ใน Eclipse เป็นไฟล์ไม่ใช่ไดเร็กทอรี ดังนั้นเช่น mkdir -pa / .project ไม่สมเหตุสมผล
ddbug
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.