Buraya biraz geç kalabilirsiniz, ancak gelecekteki cevap arayanlar fayda sağlayabilir.
Bu da beni rahatsız ediyordu, ben de düşüp kirlenip ilk senaryomu yazacağımı düşündüm. Zenity paketi kurulmalı (sudo apt-get install zenity), ama muhtemelen zaten orada olacağından eminim. Ayrıca, işlem tamamlandığında ilerleme iletişim kutusunun başlığını değiştirmek için wmctrl (pencere yöneticisi denetimi) kullanıyorum, kolayca kurulabilir ancak yapmazsanız fark yaratmaz. Panelimde ne zaman yapıldığını görmeyi seviyorum.
Komut dosyası temel olarak bir kaynak ve hedef dizini sorar, hedef üzerindeki kaynak üzerindeki hedef yüzdesini du kullanarak hesaplar ve bir ilerleme çubuğu görüntüler.
Not: Bu yalnızca tam dizin / dosya senkronizasyonu için çalışır (genellikle uygun önbellek yedeklemelerini yapmak için kullanırım), yani --exclude = / file / in / Source-directory seçeneği yoktur. Kaynak dizinde olmayan Hedef dizininde dosya / dizin varsa da çalışmaz. Uzak kaynaklar / destinasyonlar için işe yarayıp yaramadığından emin değilim çünkü hiçbir zaman ya da test etmek için bu kaynağa ihtiyacım olmadı.
PS. Bu senaryo çok kötü yazılmış veya çok verimsiz olabilir (burada script-virgin), ama en azından amacına hizmet ediyor ve elbette gereksinimlerinize uyacak şekilde düzenlemenizi ve geliştirmenizi bekliyoruz. PSS. Ayrıca, rsync'i öldürmek için iptal düğmesini alamadım, ben de yeni çıkardım.
#!/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