Rsync พร้อมรายการตัวแปร


0

ฉันพยายามเขียนสคริปต์ทุบตีที่จะซิงค์เฉพาะโฟลเดอร์ย่อยบางชุดเท่านั้น ฉันพยายามคิดให้ลื่นมากขึ้นเพื่อที่ฉันจะสามารถเพิ่มตัวแปรเช่นFOLDER1='name of folder in home directory'แล้ว

rsync -arvz --delete /home/emka/$FOLDER1/ /home/emka/Desktop/Mount/$FOLDER1

ขณะนี้ฉันมีFOLDER1ผ่านFOLDER13แต่ฉันไม่ต้องการมีบรรทัดข้างต้นสิบสามครั้ง

ใครช่วยผลักดันให้ฉันทำเช่นนี้?

bash  rsync 

ไม่ได้คำตอบทั่วไปคำถามของคุณ: rsync -arvz --delete /home/emka/{folder1,folder2,folder[3456]} /home/emka/Desktop/Mount/แต่ในตัวอย่างนี้โดยเฉพาะอย่างยิ่งคุณยังสามารถเพียงแค่ใช้สัญลักษณ์แทน: หมายเหตุสัญลักษณ์ตัวแทนที่ซ้อนกัน และสังเกตว่าสแลชต่อท้าย/ต้องเปลี่ยนอย่างไร
cfi

คำตอบ:


3

ทุบตีช่วยให้คุณใช้อาร์เรย์และลูป

กำหนดแต่ละเส้นทางเป็นองค์ประกอบของอาร์เรย์จากนั้นวนรอบอาร์เรย์


ขอบคุณ! ฉันไม่รู้สิ่งนี้ ฉันค่อนข้างใหม่ในการทุบตี

การเขียนสคริปต์ของเชลล์สนุกไปกับการระเบิด! คุณจะชอบมันมากขึ้นเรื่อย ๆ ยิ่งใช้มากขึ้นเท่านั้น

ไม่จำเป็นต้องวนซ้ำในอาร์เรย์ในกรณีที่ง่ายเช่นนี้ซึ่งคำสั่ง rsync หนึ่งสามารถทำงานได้ทั้งหมด
Cougar

1

บางคนที่นี่ดูเหมือนจะไม่ได้อ่านคำถามต้นฉบับอย่างถูกต้อง แต่ตามที่แนะนำ: คุณสามารถ (และควร) ใช้อาร์เรย์ หากคุณจริงๆมีชื่อโฟลเดอร์ที่เก็บไว้ในตัวแปรFOLDER1, FOLDER2ฯลฯ และต้องการที่จะให้มันเป็นอย่างนั้นคุณสามารถใช้ต่อไปนี้:

for i in {1..13}; do
   eval "FOLDER=\$FOLDER$i"
   rsync -arvz --delete "/home/emka/$FOLDER/" "/home/emka/Desktop/Mount/$FOLDER"
done

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


หากคุณทำrsync dir1 dir2 /เนื้อหา dir1 จะอยู่ใน dir2 / dir1 อยู่ดี คุณไม่จำเป็นต้องใช้คำสั่ง "สำหรับ" เพราะชื่อ $ FOLDER จะเหมือนกันทั้งสองข้าง {1..13} คือการขยายรั้งที่ประเมินก่อนชื่อตัวแปรเช่น $ FOLDER {1..13} จะเป็นรายการของ $ FOLDER1, $ FOLDER2, … $ FOLDER13 ต่อไป
Cougar

0

Bash 3.0+ รองรับอาเรย์ช่วง

for i in {1..13}
do
    rsync -arvz --delete /home/emka/FOLDER${i}/ /home/emka/Desktop/Mount/FOLDER${i}
done

ACH ฉันอ่านมันตามความหมายที่คุณมี 13 โฟลเดอร์เรียกว่า Folder1 - Folder 13 ดำเนินการต่อ!

0

ด้วยการใช้ Bash brace ส่วนขยายคุณสามารถทำได้:

rsync -arvz --delete /home/emka/$FOLDER{1..13} /home/emka/Desktop/Mount/

หากคุณต้องการใช้อาร์เรย์ (ตามที่บางคนแนะนำและเป็นความคิดที่ดี) คุณยังสามารถใช้ rsync หนึ่งรายการโดยไม่วนซ้ำตราบใดที่ชื่อโฟลเดอร์ในอาร์เรย์ไม่ลงท้ายด้วยเครื่องหมายทับ

cd /home/emka
rsync -arvz --delete ${folderarray[@]} /home/emka/Desktop/Mount/

ใส่ "echo" ในตอนต้นของบรรทัดนี้เพื่อดูว่ามันจะทำอะไรก่อนที่จะใช้งานครั้งแรก :-)

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