Можливо, тут буде трохи пізно, але майбутні шукачі відповідей можуть отримати користь.
Це теж мене клопіло, тому я подумав, що зійду і забрудниться, і напишу свій перший сценарій. Зенність пакета повинна бути встановлена (sudo apt-get install zenity), але я впевнений, що він, мабуть, вже буде. Крім того, я використовую wmctrl (керування вікнами управління), щоб змінити назву діалогового вікна прогресу після його завершення, його легко встановити, але якщо ви цього не зробите, це не змінить значення. Мені просто подобається бачити, коли це робиться на моїй панелі.
Сценарій, в основному, запитує джерело та каталог призначення, обчислює відсоток пункту призначення над розміром джерела за допомогою du та відображає панель прогресу.
Примітка. Це працює лише для повного синхронізації каталогу / файлів (я зазвичай використовую його для створення резервного копіювання кеш-файлу apt), тому немає --exclude = / file / in / Source-directory option. Також не буде працювати, якщо в каталозі призначення немає файлів / каталогів, а не у вихідному каталозі. Я не впевнений, чи працює він для віддалених джерел / напрямків, оскільки ніколи в мене не було потреби в ньому або в ресурсах для тестування.
PS. Цей сценарій може бути дуже погано написаним або дуже неефективним, (скрипт-незайманий тут), але принаймні він служить його цілі, і, звичайно, ви можете редагувати та вдосконалювати його відповідно до ваших потреб. PSS. Крім того, не вдалося отримати кнопку "Скасувати", щоб убити rsync, тому я просто її видалив.
#!/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