Có thể hơi muộn ở đây nhưng những người tìm câu trả lời trong tương lai có thể có lợi.
Điều này cũng làm tôi khó chịu vì vậy tôi nghĩ rằng tôi đã chán nản và viết kịch bản đầu tiên của mình. Gói tiện ích phải được cài đặt (sudo apt-get install zenity), nhưng tôi chắc chắn rằng nó có thể sẽ ở đó. Ngoài ra, tôi sử dụng wmctrl (điều khiển trình quản lý cửa sổ) để thay đổi tiêu đề của hộp thoại tiến trình khi hoàn thành, nó có thể dễ dàng cài đặt nhưng sẽ không tạo ra sự khác biệt nếu bạn không. Tôi chỉ muốn xem khi nó được thực hiện trong bảng điều khiển của tôi.
Kịch bản về cơ bản yêu cầu một thư mục nguồn và đích, tính toán tỷ lệ phần trăm của đích trên kích thước nguồn bằng du và hiển thị một thanh tiến trình.
Lưu ý: Điều này chỉ hoạt động để đồng bộ hóa thư mục / tập tin hoàn chỉnh (tôi thường sử dụng nó để tạo bản sao lưu của bộ đệm apt), vì vậy không có tùy chọn --exclude = / file / in / Source-thư mục. Cũng sẽ không hoạt động nếu có tệp / thư mục trong thư mục Đích không có trong thư mục nguồn. Tôi không chắc liệu nó có hoạt động cho các nguồn / đích từ xa không vì tôi chưa bao giờ có nhu cầu về nó hoặc các tài nguyên để kiểm tra nó.
Tái bút Kịch bản này có thể được viết rất tệ hoặc rất kém hiệu quả, (kịch bản còn nguyên vẹn ở đây), nhưng ít nhất nó phục vụ mục đích của nó và tất nhiên bạn được hoan nghênh chỉnh sửa và cải thiện nó cho phù hợp với nhu cầu của bạn. PSS. Ngoài ra, không thể có nút hủy để giết rsync nên tôi mới gỡ bỏ nó.
#!/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