อาจจะสายไปสักหน่อย แต่ผู้หาคำตอบในอนาคตอาจได้รับประโยชน์
นี่เป็นการบักฉันด้วยดังนั้นฉันคิดว่าฉันจะลงและสกปรกและเขียนสคริปต์แรกของฉัน ต้องมีการติดตั้งแพ็คเกจ zenity (sudo apt-get install zenity) แต่ฉันแน่ใจว่ามันอาจจะมีอยู่แล้ว นอกจากนี้ฉันใช้ wmctrl (การควบคุมตัวจัดการหน้าต่าง) เพื่อเปลี่ยนชื่อของกล่องโต้ตอบความคืบหน้าเมื่อเสร็จสิ้นสามารถติดตั้งได้อย่างง่ายดาย แต่จะไม่สร้างความแตกต่างถ้าคุณไม่ทำ ฉันแค่อยากจะดูว่าเมื่อมันเสร็จในแผงของฉัน
โดยทั่วไปสคริปต์จะขอไดเรกทอรีต้นทางและปลายทางคำนวณเปอร์เซ็นต์ของปลายทางเหนือขนาดต้นทางโดยใช้ du และแสดงแถบความคืบหน้า
หมายเหตุ: ใช้งานได้เฉพาะกับการซิงค์ไดเรกทอรี / ไฟล์ที่สมบูรณ์ (โดยปกติฉันจะใช้เพื่อสำรองข้อมูลแคช apt) ดังนั้นจึงไม่มีตัวเลือก --exclude = / file / in / Source-directory และจะไม่ทำงานหากมีไฟล์ / ไดเรกทอรีในไดเรกทอรีปลายทางไม่อยู่ในไดเรกทอรีต้นทาง ฉันไม่แน่ใจว่าจะทำงานกับแหล่ง / ปลายทางระยะไกลได้หรือไม่เพราะฉันไม่เคยต้องการมันหรือแหล่งข้อมูลเพื่อทดสอบ
PS สคริปต์นี้อาจเขียนได้แย่มากหรือไม่มีประสิทธิภาพมาก (อย่างน้อยสคริปต์ที่นี่) แต่อย่างน้อยก็มีไว้สำหรับวัตถุประสงค์และแน่นอนว่าคุณยินดีที่จะแก้ไขและปรับปรุงให้เหมาะกับความต้องการของคุณ PSS ยังไม่สามารถรับปุ่มยกเลิกเพื่อฆ่า rsync ดังนั้นฉันเพิ่งลบมัน
#!/bin/bash
set -e;
WELC="Running RsyncP as $USER";
function echo_progress()
{
while (($TRANSFER_SIZE > 1000));
do
DEST_SIZE=$(du -s $DEST_FOLDER | cut -d / -f 1);
((TRANSFER_SIZE=$SOURCE_SIZE-DEST_SIZE));
PROGRESS_PERC=$((DEST_SIZE*100/SOURCE_SIZE));
echo $PROGRESS_PERC;
sleep 0.1s;
done;
echo 100;
zenity --info --width=250 --title=RsyncP --text="File syncing complete!";
}
function get_input()
{
dirs=$(zenity --forms --width=500 --title="RsyncP" --text="Enter source And destination directories" --add-entry="Source: " --add-entry="Destination: " --separator=" ");
SOURCE_FOLDER=$(echo $dirs | cut -d' ' -f 1);
DEST_FOLDER=$(echo $dirs | cut -d' ' -f 2);
OPTIONS=-$(zenity --list --title="RsyncP Options" --text="Select rsync options" --separator='' --height=470 --width=470 --checklist --column "activate" --column "Option" --column "Description" FALSE v "Verbose (Terminal only)" FALSE q "Quiet, supress non-error messages (Terminal only)" FALSE P "Progress (Terminal only)" FALSE a "Archive (lrpog)" TRUE r "Recurse into directories" FALSE p "Preserve permissions" FALSE o "Preserve owner" FALSE g "Preserve group" FALSE l "Copy symlinks as symlinks");
zenity --question --no-wrap --title="RsyncP" --width=500 --text="rsync $OPTIONS $SOURCE_FOLDER $DEST_FOLDER\nDo you want to continue?";
SOURCE_SIZE=$(du -s $SOURCE_FOLDER | cut -d / -f 1);
DEST_SIZE=$(du -s $DEST_FOLDER | cut -d / -f 1);
PROGRESS_PERC=$((DEST_SIZE*100/SOURCE_SIZE));
TRANSFER_SIZE=1001;
}
if [ "$(id -u)" != "0" ]; then
zenity --question --title=RsyncP --text="$WELC, Continue?";
get_input;
rsync $OPTIONS $SOURCE_FOLDER $DEST_FOLDER &
echo_progress | zenity --progress --title=RsyncP --no-cancel --auto-close --text="Copying from \n$SOURCE_FOLDER to \n$DEST_FOLDER" ;
else
zenity --question --title=RsyncP --text="$WELC, Continue?";
get_input;
sudo rsync $OPTIONS $SOURCE_FOLDER $DEST_FOLDER &
echo_progress | zenity --progress --title=RsyncP --no-cancel --auto-close --text="Copying from \n$SOURCE_FOLDER to \n$DEST_FOLDER" ;
fi