rsyncコマンドの影響を受けるファイル数を警告して提供します。

rsyncコマンドの影響を受けるファイル数を警告して提供します。

私のrsync結果--dry-runは次のとおりです

% rsync --dry-run -avi --delete-after /home/blueray/Documents/rsync-test/src /home/blueray/Documents/rsync-test/dest
building file list ... done
.d..t...... src/
>f.st...... src/empty-asciidoc-document 3.adoc
>f+++++++++ src/empty-asciidoc-document 4.adoc
>f+++++++++ src/empty-asciidoc-document-renamed.adoc
*deleting   src/empty-asciidoc-document.adoc
*deleting   src/empty-asciidoc-document 2.adoc

sent 254 bytes  received 27 bytes  562.00 bytes/sec
total size is 16  speedup is 0.06 (DRY RUN)

次のような出力を探しています。

building file list ... done
.d..t...... src/
>f.st...... src/empty-asciidoc-document 3.adoc
>f+++++++++ src/empty-asciidoc-document 4.adoc
>f+++++++++ src/empty-asciidoc-document-renamed.adoc
*deleting   src/empty-asciidoc-document.adoc
*deleting   src/empty-asciidoc-document 2.adoc

sent 254 bytes  received 27 bytes  562.00 bytes/sec
total size is 16  speedup is 0.06 (DRY RUN)

Warning: n files will be affected, do you want to continue?

これまで私が思いついたスクリプトは次のとおりです。

#!/bin/bash

affected_files=$(rsync --dry-run -avi --delete-after /home/blueray/Documents/rsync-test/src /home/blueray/Documents/rsync-test/dest)
echo $affected_files

number_of_affected_files=$(echo $affected_files | grep src | wc -l)

echo "Warning: ${number_of_affected_files} files will be affected, do you want to continue?"

while true; do
    case $yn in
        [Yy]* ) rsync -avi --delete-after /home/blueray/Documents/rsync-test/src /home/blueray/Documents/rsync-test/dest; break;;
        [Nn]* ) exit;;
        * ) read -p "Please answer yes or no: " yn;;
    esac
done

しかし、いくつかの問題があります。$affected_files改行は維持されません。したがって、スクリプトは機能しません。また、$affected_files | grep src | wc -l影響を受ける物理ファイルの数が提供されているかどうかはわかりません。

どうですか?

答え1

OP ここで現在使用中のスクリプトは次のとおりです。

#!/bin/bash

rsync -ab --dry-run --stats --human-readable --inplace --debug=NONE --log-file=rsync.log --backup-dir=rsync_bak.$(date +"%d-%m-%y_%I-%M-%S%P") --log-file-format='%t %f %o %M' --delete-after /home/blueray/Documents/rsync-testsrc /home/blueray/Documents/rsync-testdest | sed -e '1d;5,12d;14,17d'

echo -e "\nDo you want to continue?"

while true; do
    case $yn in
        [Yy]* ) rsync -ab --human-readable --inplace --info=PROGRESS2,BACKUP,DEL --debug=NONE --log-file=/home/blueray/Documents/rsync-testdest/rsync.log --backup-dir=rsync_bak.$(date +"%d-%m-%y_%I-%M-%S%P") --log-file-format='%t %f %o %M' --delete-after /home/blueray/Documents/rsync-testsrc /home/blueray/Documents/rsync-testdest; break;;
        [Nn]* ) exit;;
        * ) read -p "Please answer yes or no: " yn;;
    esac
done

関連情報