Mungkin agak terlambat di sini, tetapi para pencari jawaban di masa depan mungkin akan mendapat manfaat.
Ini menggangguku juga, jadi kupikir aku akan turun dan kotor dan menulis skrip pertamaku. Paket zenity harus diinstal (sudo apt-get install zenity), tapi saya yakin itu mungkin sudah ada di sana. Juga, saya menggunakan wmctrl (kontrol manajer jendela) untuk mengubah judul dialog progres ketika selesai, mudah diinstal tetapi tidak akan membuat perbedaan jika Anda tidak. Saya hanya ingin melihat ketika selesai di panel saya.
Script pada dasarnya meminta direktori sumber dan tujuan, menghitung persentase tujuan di atas sumber dalam ukuran menggunakan du dan menampilkan bilah kemajuan.
Catatan: Ini hanya berfungsi untuk sinkronisasi direktori / file lengkap (saya biasanya menggunakannya untuk membuat cadangan apt cache), jadi tidak ada opsi --exclude = / file / in / Source-direktori. Juga tidak akan berfungsi jika ada file / direktori di direktori Tujuan tidak di direktori sumber. Saya tidak yakin apakah itu berfungsi untuk sumber / tujuan yang jauh karena tidak pernah saya membutuhkannya atau sumber daya untuk mengujinya.
PS. Skrip ini mungkin ditulis dengan sangat buruk atau sangat tidak efisien, (skrip-perawan di sini), tetapi setidaknya ini sesuai dengan tujuannya dan tentu saja Anda dapat mengedit dan memperbaikinya sesuai dengan kebutuhan Anda. PSS. Juga, tidak bisa mendapatkan tombol batal untuk membunuh rsync jadi saya baru saja menghapusnya.
#!/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