ฉันใช้เทอร์มินัลเพื่อคัดลอกไฟล์จากไดรฟ์หนึ่งไปยังอีกไดรฟ์
sudo mv -vi /location/to/drive1/ /location/to/drive2/
อย่างไรก็ตามที่หยุดทันทีในขณะที่บางชั่วโมงในนั้นและไม่มีข้อผิดพลาดหลังจากสร้างไดเรกทอรี
โซลูชันของฉันเองที่มักจะเป็นการผสมผสานระหว่างการแฮ็กและการเปรียบเทียบซึ่งส่วนใหญ่เป็นเวลาที่ยุ่งเหยิงเพราะตอนนี้ฉันต้องกู้คืนจากการทำสำเนากลางโดยไม่ทราบว่าไฟล์ใดหายไป (เขียนด้วยความยาวหนึ่งบรรทัดสำหรับ zsh สคริปต์นี้ใช้ไม่ได้กับการทุบตีตามที่เขียนไว้):
source_directory="/path/to/source_directory/";
target_directory="/path/to/target_directory/";
while read hash_and_file; do {
echo "${hash_and_file}" | read hash file;
echo "${file}" | sed "s/^/${source_directory}/g" | read copy_from;
echo "${copy_from}" | sed "s/${source_directory}/${target_directory}/g" | read copy_to;
mv -v "${copy_from}" "${copy_to}" | tee -a log;
rm -v "${copy_from}" | tee -a log; };
done <<<$(
comm -23 <( find ${source_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${source_directory}: :g" | sort;
) <( find ${target_directory} -type f -exec sha256sum "{}" \; |
sed "s: ${target_directory}: :g" | sort; ) )
นี่เป็นข้อผิดพลาดได้ง่ายหากชื่อไดเรกทอรีเป้าหมายหรือ source_directory เป็นส่วนหนึ่งของพา ธ และลบไฟล์หากยังไม่ถูกย้ายเนื่องจากถูกทำเครื่องหมายว่าซ้ำกัน นอกจากนี้ยังไม่ได้ไดเรกทอรีแหล่งที่มาในท้ายที่สุด
มีวิธีปฏิบัติที่ดีที่สุดวิธีการกู้คืนจาก mv ขัดจังหวะหรือไม่
--delete-during receiver deletes during the transfer
และยังมีหลายทางเลือกที่มีประโยชน์อื่น ๆ--delete --delete-before --delete-delay --delete-after --delete-excluded
: ดังนั้นใช่ rsync เป็นทางเลือกที่ดีที่สุด
mv
คำสั่งเดียวกันเท่านั้น? อาจ*
ผนวกเข้ากับเส้นทางของแหล่งที่มาหากแหล่งต้นฉบับเป็นไดเรกทอรี
rsync --delete*
จะเป็นหายนะ ! มันจะลบสิ่งdest
ที่ไม่ได้อยู่ในปัจจุบันsrc
ดังนั้นไฟล์ทั้งหมดที่ถูกย้ายเรียบร้อยแล้วในความพยายามครั้งก่อนจะถูกลบ! คุณอาจคิดว่าrsync --remove-source-files
ฉันเห็นด้วยที่จะเป็นทางเลือกที่ดี ( more1 , more2 )
rsync --delete
จะลบเฉพาะไฟล์อื่น ๆที่ไม่ได้เป็นส่วนหนึ่งของแหล่งที่มา จาก [man rsync] () * ลบไฟล์ที่ไม่เกี่ยวข้องจาก dest dirs * ทำความเข้าใจความหมายที่ไม่เกี่ยวข้อง : ไม่ได้รับการซิงค์ และใช่ rsync ยังให้วิธีการลบไฟล์ต้นฉบับหลังจากที่พวกเขาถูกส่งอย่างถูกต้อง
cmp
แทนการแฮช มันมีการอ้างอิงและปัญหาเดียวกันกับwhile read
Gilles ที่กล่าวถึง นอกจากนี้ยังช้าและ verbose แต่จะทำให้เนื้อที่ว่างบนดิสก์เร็วกว่าวิธี rsync เนื่องจากมีการย้ายไฟล์จากแหล่งที่มาเมื่อมีการเรียกใช้ มันอาจเป็นแรงบันดาลใจให้กับผู้กล้า