การคัดลอกไฟล์แบบเรียกซ้ำไม่ใช่การเขียนทับ?


21

ฉันมีไดเรกทอรีที่มีโฟลเดอร์อื่น ๆ ที่ประกอบด้วยไฟล์ CoffeeScript / JavaScript ฉันสามารถรวบรวมไฟล์ CoffeeScript ลงในโฟลเดอร์ใหม่ที่มีโครงสร้างโฟลเดอร์เดียวกันได้

สิ่งที่ฉันต้องการทำคือคัดลอกไฟล์ * .js ทั้งหมดในโฟลเดอร์ต้นทางไปยังโฟลเดอร์ปลายทางซ้ำ ฉันไม่ต้องการเขียนทับไฟล์ใด ๆ ที่มีอยู่แล้วในโฟลเดอร์ปลายทาง มีความคิดอย่างไรที่จะทำให้สำเร็จ

ฉันลองใช้cp -n source/**.js desination/และcp -Rn source/**.js desination/หลังจากดูคำถามอื่นที่คล้ายกัน แต่ดูเหมือนจะไม่ทำงาน

มีความคิดว่าจะทำสิ่งนี้ได้อย่างไร?


คุณดูเป็น rsync ไหม?
bonob

@bonob ฉันไม่ได้ ฉันใช้มันครั้งเดียวหรือสองครั้ง แต่ใช้เพื่อรับไฟล์จากระยะไกลเท่านั้น
AlbertEngelB

คำตอบ:


25

คุณสามารถใช้ rsync (มันทำสำเนาเฉพาะที่)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r เพื่อเรียกคืนไปยังไดเรกทอรี
  • --ignore-existing เพื่อละเว้นไฟล์ที่มีอยู่ในปลายทาง
  • includeและexcludeกรองเฉลี่ย: include ไดเรกทอรีทั้งหมดรวมทั้งหมด * .js ไฟล์ไม่รวมส่วนที่เหลือ; จำเป็นต้องรวมถึงครั้งแรกไม่เช่นนั้นการแยกขั้นสุดท้ายจะแยกไดเรกทอรีก่อนที่จะสแกนเนื้อหา

สุดท้ายคุณสามารถเพิ่ม a -Pถ้าคุณต้องการดูความคืบหน้า a --list-onlyถ้าคุณต้องการดูสิ่งที่มันจะคัดลอกโดยไม่ต้องคัดลอกจริงและ-tถ้าคุณต้องการที่จะรักษาบันทึกเวลา


สิ่งนี้ไม่เกี่ยวข้อง แต่ฉันเรียนรู้คำสั่ง rsync เมื่อเร็ว ๆ นี้เมื่อฉันย้ายเอกสาร 15 ปีจากพาร์ติชันหนึ่งไปยังอีกพาร์ติชัน มั่นใจว่าไฟล์ของฉันอยู่ที่นั่นจากนั้นฉันเช็ดพาร์ทิชันเก่าและวางสิ่งอื่นไว้ในนั้น ฉันรู้ในภายหลังว่าฉันทำเวลาทั้งหมดหายไปและค้นพบแฟล็ก -t แค่อยากแบ่งปันความทุกข์ของฉัน: '(


ฮ่าฮ่าอันนี้ใช้ได้! rsyncเห็นได้ชัดว่าเป็นระเบิด
AlbertEngelB

3
ใช่มันคือฉันเพิ่งจะรู้ แต่เพิ่งเรียนรู้มากมายเกี่ยวกับมันโดยพยายามตอบคำถามของคุณ หากคุณต้องการที่จะไปต่อในอนาคตคุณสามารถกำหนดตัวกรองที่ซับซ้อนในไฟล์และเรียกพวกเขาในคำสั่งตัวอย่าง คุณยังสามารถมีตัวกรองต่อไดเรกทอรีบีบอัดข้อมูลเมื่อคัดลอกและนี่เป็นเพียงรอยขีดข่วนพื้นผิวของมัน!
bonob

7

สิ่งนี้สามารถทำได้โดยใช้ cp ดูที่นี่:

sudo cp -vnpr /xxx/* /yyy

xxx = แหล่งที่มา

yyy = ปลายทาง

v = verbose

n = ไม่มีการอุดตัน (ไม่มีการเขียนทับ)

p = สงวนสิทธิ์

r = เรียกซ้ำ


5

ดูหน้าคนดูเหมือนว่าคุณต้องการ-nตัวเลือก

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)

ฉันได้ลองใช้ -n แล้ว แต่ก็ไม่อนุญาตให้ฉันกรองไฟล์ * .js
AlbertEngelB

0

distro ของฉันไม่มีการอุดตันดังนั้น:

echo n | cp -vipr xxx yyy

xxx = แหล่งที่มา

yyy = ปลายทาง

v = verbose

i = แบบโต้ตอบ (พร้อมที่จะเขียนทับ) | ซึ่งเป็นสาเหตุที่คำสั่งนั้นนำหน้าด้วย "echo n |"

p = สงวนสิทธิ์

r = เรียกซ้ำ

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