Może tu być trochę za późno, ale przyszli poszukiwacze odpowiedzi mogą skorzystać.
To mnie też wkurzyło, więc pomyślałem, że zejdę na dół i napisam swój pierwszy scenariusz. Pakiet zenity musi być zainstalowany (sudo apt-get install zenity), ale jestem pewien, że prawdopodobnie już tam będzie. Ponadto używam wmctrl (kontrolka menedżera okien), aby zmienić tytuł okna dialogowego postępu, gdy jest zrobiony, jest łatwy do zainstalowania, ale nie zrobi różnicy, jeśli tego nie zrobisz. Po prostu lubię widzieć, kiedy skończy się w moim panelu.
Skrypt zasadniczo pyta o katalog źródłowy i docelowy, oblicza procent miejsca docelowego w stosunku do źródła za pomocą du i wyświetla pasek postępu.
Uwaga: Działa to tylko w przypadku pełnej synchronizacji katalogu / pliku (zwykle używam go do tworzenia kopii zapasowych apt cache), więc nie ma opcji --exclude = / file / in / Source-directory. Nie zadziała również, jeśli w katalogu docelowym nie ma plików / katalogów, a nie katalogu źródłowego. Nie jestem pewien, czy to działa dla zdalnych źródeł / miejsc docelowych, ponieważ nigdy nie miałem potrzeby ani zasobów, aby to przetestować.
PS. Ten skrypt może być bardzo źle napisany lub bardzo nieefektywny (tutaj skrypt-dziewica), ale przynajmniej spełnia swój cel i oczywiście możesz go edytować i ulepszać, aby odpowiadał twoim potrzebom. PSS. Ponadto nie mogłem dostać przycisku Anuluj, aby zabić rsync, więc właśnie go usunąłem.
#!/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