Android

วิธียกเว้นไฟล์และไดเรกทอรีด้วย rsync

เวก้าผับ ฉบับพิเศษ

เวก้าผับ ฉบับพิเศษ

สารบัญ:

Anonim

Rsync เป็นยูทิลิตี้บรรทัดคำสั่งที่รวดเร็วและหลากหลายที่ซิงโครไนซ์ไฟล์และโฟลเดอร์ระหว่างสองตำแหน่งผ่านเชลล์ระยะไกล

ด้วย Rsync คุณสามารถทำมิเรอร์ข้อมูลสร้างการสำรองข้อมูลเพิ่มเติมและคัดลอกไฟล์ระหว่างระบบ เมื่อคัดลอกข้อมูลคุณอาจต้องการแยกไฟล์หรือไดเรกทอรีอย่างน้อยหนึ่งไฟล์ตามชื่อหรือที่ตั้ง

ในบทช่วยสอนนี้เราจะแสดงวิธีแยกไฟล์และไดเรกทอรีด้วย rsync

ก่อนที่คุณจะเริ่ม

คุณควรมีความรู้พื้นฐานว่า rsync ทำงานอย่างไร

ในตัวอย่างด้านล่างเราจะใช้ rsync กับตัวเลือก -a สิ่งนี้จะบอก rsync ให้ซิงค์ไดเรกทอรีซ้ำถ่ายโอนอุปกรณ์พิเศษและบล็อกและรักษาลิงก์สัญลักษณ์เวลาแก้ไขกลุ่มความเป็นเจ้าของและสิทธิ์

เมื่อไม่รวมไฟล์หรือไดเรกทอรีคุณต้องใช้พา ธ สัมพัทธ์กับไดเรกทอรีต้นทาง

มีสองตัวเลือกในการระบุไฟล์และไดเรกทอรีที่คุณต้องการยกเว้น:

  • จาก บรรทัดคำสั่ง ใช้ตัวเลือก --exclude จาก ไฟล์ โดยใช้ตัวเลือก --exclude-from

ยกเว้นไฟล์เฉพาะ

หากต้องการยกเว้นไฟล์เฉพาะให้ส่งพา ธ สัมพัทธ์ไปยังไฟล์ไปที่ตัวเลือก --exclude

ในตัวอย่างต่อไปนี้ไฟล์ src_directory/file.txt จะไม่ถูกถ่ายโอน:

rsync -a --exclude 'file.txt' src_directory/ dst_directory/

ยกเว้นไดเรกทอรีเฉพาะ

การยกเว้นไดเรกทอรีเฉพาะนั้นเหมือนกับการแยกไฟล์เพียงแค่ผ่านเส้นทางสัมพัทธ์ไปยังไดเรกทอรีไปยังตัวเลือก --exclude ดังที่แสดงด้านล่าง:

rsync -a --exclude 'dir1' src_directory/ dst_directory/

rsync -a --exclude 'dir1/*' src_directory/ dst_directory/

ยกเว้นไฟล์หรือไดเรกทอรีหลายรายการ

หากต้องการยกเว้นหลายไฟล์หรือไดเรกทอรีเพียงระบุตัวเลือก --exclude หลายตัว:

rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/

rsync -a --exclude={'file1.txt', 'dir1/*', 'dir2'} src_directory/ dst_directory/

หากจำนวนไฟล์และ / หรือไดเรกทอรีที่คุณต้องการแยกมีขนาดใหญ่แทนที่จะใช้ตัวเลือก --exclude หลายตัวคุณสามารถระบุไฟล์และไดเรกทอรีที่คุณต้องการยกเว้นในไฟล์และส่งไฟล์ไปยัง --exclude-from ตัวเลือก

คำสั่งด้านล่างทำเหมือนกับที่กล่าวมาข้างต้น:

rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/ ยกเว้น-file.txt

file1.txt dir1/* dir2

ยกเว้นไฟล์หรือไดเรกทอรีหลายรายการโดยยึดตามรูปแบบ

ด้วย rsync คุณยังสามารถแยกไฟล์และไดเรกทอรีตามรูปแบบที่ตรงกับไฟล์หรือชื่อไดเรกทอรี

ตัวอย่างเช่นหากต้องการยกเว้นไฟล์ .jpg ทั้งหมดที่คุณจะรัน:

rsync -a --exclude '*.jpg*' src_directory/ dst_directory/

เป็นการยากที่จะแยกไฟล์และไดเรกทอรีอื่นทั้งหมดออกยกเว้นไฟล์ที่ตรงกับรูปแบบที่กำหนด สมมติว่าคุณต้องการยกเว้นไฟล์และไดเรกทอรีอื่นทั้งหมดยกเว้นไฟล์ที่ลงท้ายด้วย .jpg

ทางเลือกหนึ่งคือใช้คำสั่งต่อไปนี้:

rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/

เมื่อใช้ตัวเลือกการรวม / แยกหลายกฎการจับคู่แรกจะมีผล

  • --include='*.jpg' - อันดับแรกเราจะรวมไฟล์ .jpg ทั้งหมด --include='*/' - จากนั้นเราจะรวมไดเรกทอรีทั้งหมดที่อยู่ในไดเรกทอรีใน src_directory หากไม่มี rsync นี้จะคัดลอกไฟล์ *.jpg ในไดเรกทอรีระดับบนสุดเท่านั้น -m - ลบไดเรกทอรีที่ว่างเปล่า

ตัวเลือกอื่นจะไปป์เอาท์พุทของคำสั่ง find เพื่อ rsync:

find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/

  • -printf %P\\0\\n - จะลบ src_directory/ ออกจากเส้นทางของไฟล์ --files-from=- - หมายถึงรวมเฉพาะไฟล์จากอินพุตมาตรฐาน (ไฟล์ที่ส่งจากคำสั่ง find)

ข้อสรุป

ในบทช่วยสอนนี้คุณเรียนรู้วิธีแยกไฟล์และไดเรกทอรีเมื่อถ่ายโอนข้อมูลด้วย Rsync มีอีกมากมายที่จะเรียนรู้เกี่ยวกับ Rsync ได้ที่หน้าคู่มือผู้ใช้ของ Rsync

เทอร์มินัล rsync