Potrebbe essere un po 'tardi qui, ma i futuri cercatori di risposte potrebbero trarne beneficio.
Anche questo mi infastidiva, così ho pensato di sporcarmi e scrivere la mia prima sceneggiatura. Il pacchetto zenity deve essere installato (sudo apt-get install zenity), ma sono sicuro che probabilmente sarà già lì. Inoltre, utilizzo wmctrl (controllo del gestore delle finestre) per modificare il titolo della finestra di dialogo di avanzamento al termine, è facilmente installabile ma in caso contrario non farà alcuna differenza. Mi piace solo vedere quando è finito nel mio pannello.
Lo script richiede fondamentalmente una directory di origine e di destinazione, calcola la percentuale della destinazione rispetto alla dimensione della sorgente utilizzando du e visualizza una barra di avanzamento.
Nota: questo funziona solo per la sincronizzazione completa di directory / file (di solito lo uso per fare backup della cache apt), quindi nessuna opzione --exclude = / file / in / Source-directory. Inoltre non funzionerà se ci sono file / directory nella directory di destinazione non nella directory di origine. Non sono sicuro che funzioni per fonti / destinazioni remote poiché non ne ho mai avuto la necessità o le risorse per testarlo.
PS. Questo script potrebbe essere scritto molto male o molto inefficiente, (script-virgin qui), ma almeno serve al suo scopo e, naturalmente, sei il benvenuto per modificarlo e migliorarlo in base alle tue esigenze. PSS. Inoltre, non sono riuscito a ottenere il pulsante Annulla per uccidere rsync, quindi l'ho appena rimosso.
#!/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