รวมโฟลเดอร์และแทนที่ไฟล์โดยใช้ CLI


9

ฉันต้องการอัปเดตซอฟต์แวร์ฟอรัมและฉันต้องการทดสอบกระบวนการอัปเกรดโดยใช้ CLI เพื่อความเป็นไปได้ในการเรียน

ฉันจะรวมเนื้อหาของโฟลเดอร์วิธีลงในโฟลเดอร์อื่นและแทนที่ไฟล์?

คำตอบ:


10

คุณสามารถใช้rsyncเพื่อทำสิ่งนี้:

$ rsync -abviuzP src/ dest/
  • -aโหมดเก็บถาวร เท่ากับ -rlptgoD (ไม่ใช่ -H, -A, -X)
  • -i เปิดใช้รูปแบบที่แยกรายการซึ่งแสดงข้อมูลมากกว่ารูปแบบเริ่มต้น
  • -bสร้างไฟล์สำรองข้อมูล rsync ที่มีอยู่ในทั้งสองโฟลเดอร์ต่อท้ายไฟล์เก่า คุณสามารถควบคุมนี้ต่อท้ายด้วยคำต่อท้าย .suf
  • -u ทำให้ rsync transfer ข้ามไฟล์ซึ่งใหม่กว่าใน dest กว่าใน src
  • -z เปิดการบีบอัดซึ่งมีประโยชน์เมื่อถ่ายโอนไฟล์ที่บีบอัดได้ง่ายผ่านลิงก์ช้า
  • -P เปิด - บางส่วนและ - ความคืบหน้า
    • --partial ทำให้ rsync เก็บไฟล์ที่ถ่ายโอนบางส่วนหากการถ่ายโอนถูกขัดจังหวะ
    • --progress แสดงแถบความคืบหน้าสำหรับแต่ละโอนประโยชน์ถ้าคุณถ่ายโอนไฟล์ขนาดใหญ่

ฉันจะทิ้งสวิตช์เหล่านี้หลายอัน แต่นี่เป็นเพียงการเริ่มต้นให้คุณ ฉันอาจใช้สิ่งนี้:

$ rsync -abuP src/ dest/

เมื่อดูเรียบร้อยแล้วคุณสามารถเรียกใช้คำสั่งนี้เพื่อลบไฟล์สำรองข้อมูล:

$ find dest/ -name "*.~" -delete

ตัวอย่าง

สมมติว่าเรามีข้อมูลตัวอย่างต่อไปนี้

ข้อมูลต้นฉบับ

เราจะใช้คำสั่งต่อไปนี้เพื่อผลิตข้อมูลปลอม

$ seq 10 | xargs -I{} -- mkdir dest/dir{}
$ for i in $(seq 5); do echo "$i" > dest/dir$i/file$i;done

ข้อมูลปลอมมีลักษณะดังนี้:

$ tree -DsifvF --noreport dest/
dest
[       4096 Aug 29 22:21]  dest/dir1/
[          2 Aug 29 22:21]  dest/dir1/file1
[       4096 Aug 29 22:21]  dest/dir2/
[          2 Aug 29 22:21]  dest/dir2/file2
[       4096 Aug 29 22:21]  dest/dir3/
[          2 Aug 29 22:21]  dest/dir3/file3
[       4096 Aug 29 22:21]  dest/dir4/
[          2 Aug 29 22:21]  dest/dir4/file4
[       4096 Aug 29 22:21]  dest/dir5/
[          2 Aug 29 22:21]  dest/dir5/file5

ข้อมูลใหม่

ตอนนี้เราจะทำซ้ำข้อมูลดั้งเดิม ( dest/*-> src/) และเพิ่มไฟล์ใหม่ ๆ ลงในมิกซ์ นี่เป็นการจำลอง "การเปิดตัวใหม่

$ cp -pr dest/* src/
$ mkdir src/dir11
$ for i in 1 3 5 11; do echo "$i$i" > src/dir$i/file$i;done

ข้อมูลปลอมมีลักษณะดังนี้:

$ tree -DsifvF --noreport src/
src
[       4096 Aug 29 22:21]  src/dir1/
[          3 Aug 29 23:00]  src/dir1/file1
[       4096 Aug 29 22:21]  src/dir2/
[          2 Aug 29 22:21]  src/dir2/file2
[       4096 Aug 29 22:21]  src/dir3/
[          3 Aug 29 23:00]  src/dir3/file3
[       4096 Aug 29 22:21]  src/dir4/
[          2 Aug 29 22:21]  src/dir4/file4
[       4096 Aug 29 22:21]  src/dir5/
[          3 Aug 29 23:00]  src/dir5/file5
[       4096 Aug 29 23:00]  src/dir11/
[          5 Aug 29 23:00]  src/dir11/file11

ผสาน src / เข้ากับปลายทาง /

เลียนแบบนี้ที่เราเพิ่งติดตั้งซอฟต์แวร์ทรีใหม่ของเราsrc/และต้องการรวมเข้าในไดเรกทอรีที่มีอยู่แล้วของเรา, dest/.

$ rsync -abuP src/ dest/
sending incremental file list
dir1/file1
           3 100%    0.00kB/s    0:00:00 (xfer#1, to-check=5/13)
dir11/
dir11/file11
           5 100%    4.88kB/s    0:00:00 (xfer#2, to-check=4/13)
dir3/file3
           3 100%    2.93kB/s    0:00:00 (xfer#3, to-check=2/13)
dir5/file5
           3 100%    2.93kB/s    0:00:00 (xfer#4, to-check=0/13)

sent 416 bytes  received 97 bytes  1026.00 bytes/sec
total size is 18  speedup is 0.04

ในขณะที่คุณสามารถดูไฟล์ต่อไปนี้ได้รับการปรับปรุง file1, file3, file5 และ dir11 + file11 ที่เพิ่งเพิ่มเข้ามาใหม่

และเป็นการยืนยันเราจะเห็นว่าแฟ้มสำรองข้อมูลต่อไปนี้ถูกสร้างขึ้นโดยเมื่อมันพบที่มีอยู่ก่อนไฟล์ในrsyncdest/

$ find dest/ | grep "~"
dest/dir3/file3~
dest/dir1/file1~
dest/dir5/file5~

หากต้องการชี้แจงจุดด้านบน: เมื่อดูเรียบร้อยแล้วคุณสามารถเรียกใช้คำสั่งนี้เพื่อลบไฟล์สำรองข้อมูล:> $ find dest / -name "start dot ~" -delete นี่ดูเหมือนจะไม่เหมาะสำหรับฉันในขณะที่:> $ ค้นหา dest / -name "start dot star ~" - ลบออก ไม่แน่ใจว่ามันเป็นคำที่พิมพ์ผิดหรือบางสิ่งบางอย่างไม่ได้ติดตั้งในตอนท้าย

2

คุณสามารถใช้ cp -r name_of_the_folder / * name_of_the_destination_folder โดยที่เครื่องหมายดอกจัน (*) ย่อมาจากไฟล์ทั้งหมดและ -r สำหรับการทำซ้ำแบบเรียกซ้ำ

คุณสามารถใช้ตัวเลือก -i ซึ่งจะถามว่าคุณต้องการเขียนทับเนื้อหาหรือไม่

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