Könnte ein bisschen zu spät sein, aber zukünftige Antwortsuchende könnten davon profitieren.
Das nervte mich auch, also dachte ich, ich würde runter und schmutzig werden und mein erstes Drehbuch schreiben. Das Paket zenity muss installiert sein (sudo apt-get install zenity), aber ich bin mir sicher, dass es wahrscheinlich schon dort sein wird. Außerdem verwende ich wmctrl (Fenster-Manager-Steuerung), um den Titel des Fortschrittsdialogs zu ändern, wenn er fertig ist. Er ist leicht zu installieren, macht aber keinen Unterschied, wenn Sie es nicht tun. Ich möchte nur sehen, wann es in meinem Panel fertig ist.
Das Skript fragt grundsätzlich nach einem Quell- und Zielverzeichnis, berechnet mit du den Prozentsatz des Ziels über der Quellgröße und zeigt einen Fortschrittsbalken an.
Hinweis: Dies funktioniert nur für die vollständige Verzeichnis- / Dateisynchronisierung (ich verwende es normalerweise, um Backups von apt cache zu erstellen). Daher gibt es keine Option --exclude = / file / in / Source-directory. Funktioniert auch nicht, wenn sich Dateien / Verzeichnisse im Zielverzeichnis befinden, die sich nicht im Quellverzeichnis befinden. Ich bin mir nicht sicher, ob es für entfernte Quellen / Ziele funktioniert, da ich nie die Notwendigkeit oder die Ressourcen hatte, es zu testen.
PS. Dieses Skript ist möglicherweise sehr schlecht geschrieben oder sehr ineffizient (Skript-Jungfrau hier), aber es erfüllt zumindest seinen Zweck und natürlich können Sie es gerne bearbeiten und verbessern, um es Ihren Bedürfnissen anzupassen. PSS. Außerdem konnte ich die Abbrechen-Schaltfläche nicht zum Beenden von rsync verwenden, sodass ich sie gerade entfernt habe.
#!/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