rsync:ターゲットの最新ファイルを上書きしたときに表示

rsync:ターゲットの最新ファイルを上書きしたときに表示

一部のファイルを中央サーバーに更新するコマンドを実行しています。
このコマンドは最初にaを実行して--dry-run転送されるファイルを表示します。サーバー上の新しいファイルを上書きする必要があるかもしれません。この場合、コマンドを具体的に表示したいと
思います。rsync --dry-run

現在のrsyncコマンドは次のとおりです

rsync -aviO sdir/ ddir

コマンドが出力を生成すると仮定します。

 >f.st...... file-newer-on-source
 >f.st...... file-newer-on-destination

明確にするためにrsync -aviuO sdir/ ddir(--update)を実行すると、通常、次のような結果が得られます。

 >f.st...... file-newer-on-source

しかし、新しいファイルを上書きするときにコマンドが表示されるようにしたいです!現在とfile-newer-on-source出力に違いはありません...-destination。これがあればいいでしょう。

 >f.st...... file-newer-on-source
 >f.sT...... file-newer-on-destination

しかしそれは真実ではない。

out-format具体的に表示される他のオプションや設定はありますか?最新ファイルを上書きしますか?

答え1

ボールの位置は-v(詳細)オプションにあり、繰り返すことができます。これは要求された情報を正確に提供しません。

ただし、他のオプションで別の部分を実行して必要なものを作成することもできます(参照マンページ):

-u, --update
受信機の最新ファイルをスキップする

--existing は
シンクからの新しいファイル生成をスキップします。

--ignore-existingは
シンクのファイル更新をスキップします。

-u以下はandを使用した例です--existing

#!/bin/sh
# $Id: check-rsync,v 1.3 2022/10/11 20:02:24 tom Exp $
# Make a readable report showing whether files would be added (+), deleted (-),
# updated (>) or downdated (<) using rsync between two directories.
#
# Updates to directories are ignored.
#
# author: Thomas E. Dickey (2015)

usage() {
    cat >&2 <<-EOF
    usage: check-rsync [-d] [source] [target]
EOF
    exit 1
}

OPTS=
while [ $# != 0 ]
do
    case .$1 in
    (.-*)
        OPTS="$OPTS $1"
        shift 1
        ;;
    (*)
        break
        ;;
    esac
done

[ $# = 2 ] || usage
[ -d "$1" ] || usage
[ -d "$2" ] || usage

LANG=C
export LANG

SOURCE=$1
TARGET=$2

MYTEMP=$(mktemp -d)
trap "cd; rm -rf $MYTEMP" EXIT

syncit() {
    rsync "$@" -n -vaz --delete $OPTS "$SOURCE"/ "$TARGET" | \
        sed -e '/^\(sending\|sent\|total\) /d' \
            -e '/^$/d' \
            -e '/^\.\//d' \
            -e '/\/$/d' | \
        sort
}

cd "$MYTEMP" || exit

syncit              >all-updates
syncit -u           >was-newer
syncit --existing       >was-existing

comm -23 all-updates was-existing | \
    sed -e '/^deleting /d' \
        -e 's/^/+ /' >>report
comm -23 all-updates was-newer | \
    sed -e '/^deleting /d' \
        -e 's/^/< /' >>report
sed -e 's/^deleting /- /' -e t -e d all-updates >>report

comm -12 all-updates was-newer | \
    sed -e 's/^[[:space:]]\+//' \
        -e '/^deleting /d' -e 's/^/> /' >>report

sort -k2 report

私はそれを使って2つのローカルディレクトリツリー(約100の変更がある約10,000のファイル)を比較しました。スクリプトは、その引数がディレクトリかどうかを明示的に確認します。チェックはリモートシステムで使用するために変更されますが、質問にはデフォルトのシェルスクリプトではなくオプションの使用が含まれるため、そのrsync変更はこの例の一部ではありません。

3番目のオプションは、show =でスクリプトを展開して変更されていないファイルを表示する場合に便利です。しかし、私はこれを実際に使用することはできません。私はそれを読者の練習のままにしておきます。

出力例:

+ anon_ftp/pub/xterm/current/xterm-374.tgz
> anon_ftp/pub/xterm/current/xterm-374.tgz
+ anon_ftp/pub/xterm/current/xterm-374.tgz.asc
> anon_ftp/pub/xterm/current/xterm-374.tgz.asc
> anon_ftp/pub/xterm/current/xterm.tar.gz -> xterm-374.tgz
+ anon_ftp/pub/xterm/patches/xterm-374.patch.gz
> anon_ftp/pub/xterm/patches/xterm-374.patch.gz
+ anon_ftp/pub/xterm/patches/xterm-374.patch.gz.asc
> anon_ftp/pub/xterm/patches/xterm-374.patch.gz.asc
+ anon_ftp/pub/xterm/xterm-374.tgz
> anon_ftp/pub/xterm/xterm-374.tgz
+ anon_ftp/pub/xterm/xterm-374.tgz.asc
> anon_ftp/pub/xterm/xterm-374.tgz.asc
> anon_ftp/pub/xterm/xterm.tar.gz -> xterm-374.tgz
+ httpdocs/archives/xterm/current/xterm-374.tgz
> httpdocs/archives/xterm/current/xterm-374.tgz
+ httpdocs/archives/xterm/current/xterm-374.tgz.asc
> httpdocs/archives/xterm/current/xterm-374.tgz.asc
> httpdocs/archives/xterm/current/xterm.tar.gz -> xterm-374.tgz
+ httpdocs/archives/xterm/patches/xterm-374.patch.gz
> httpdocs/archives/xterm/patches/xterm-374.patch.gz
+ httpdocs/archives/xterm/patches/xterm-374.patch.gz.asc
> httpdocs/archives/xterm/patches/xterm-374.patch.gz.asc
+ httpdocs/archives/xterm/xterm-374.tgz
> httpdocs/archives/xterm/xterm-374.tgz
+ httpdocs/archives/xterm/xterm-374.tgz.asc
> httpdocs/archives/xterm/xterm-374.tgz.asc
> httpdocs/archives/xterm/xterm.tar.gz -> xterm-374.tgz
> httpdocs/datafiles/current/xterm.tar.gz
> httpdocs/datafiles/release/xterm.tar.gz
> httpdocs/xterm/ctlseqs/ctlseqs-contents.html
> httpdocs/xterm/ctlseqs/ctlseqs.html
> httpdocs/xterm/ctlseqs/ctlseqs.pdf
> httpdocs/xterm/ctlseqs/ctlseqs.ps
> httpdocs/xterm/ctlseqs/ctlseqs.txt
> httpdocs/xterm/manpage/koi8rxterm.html
> httpdocs/xterm/manpage/koi8rxterm.pdf
> httpdocs/xterm/manpage/koi8rxterm.ps
> httpdocs/xterm/manpage/koi8rxterm.txt
> httpdocs/xterm/manpage/resize.html
> httpdocs/xterm/manpage/resize.pdf
> httpdocs/xterm/manpage/resize.ps
> httpdocs/xterm/manpage/resize.txt
> httpdocs/xterm/manpage/uxterm.html
> httpdocs/xterm/manpage/uxterm.pdf
> httpdocs/xterm/manpage/uxterm.ps
> httpdocs/xterm/manpage/uxterm.txt
> httpdocs/xterm/manpage/xterm-contents.html
> httpdocs/xterm/manpage/xterm.html
> httpdocs/xterm/manpage/xterm.pdf
> httpdocs/xterm/manpage/xterm.ps
> httpdocs/xterm/manpage/xterm.txt
> httpdocs/xterm/terminfo-contents.html
> httpdocs/xterm/terminfo-entries.html
> httpdocs/xterm/terminfo-header.html
> httpdocs/xterm/terminfo.html
> httpdocs/xterm/xterm.log.html
> logs/access_log
> logs/access_log.processed
> logs/access_log.webstat
> logs/access_ssl_log
> logs/access_ssl_log.processed
> logs/access_ssl_log.webstat
> logs/error_log
> logs/lynx.invisible-island.net/access_log
> logs/lynx.invisible-island.net/access_log.processed
> logs/lynx.invisible-island.net/access_log.webstat
> logs/lynx.invisible-island.net/access_ssl_log
> logs/lynx.invisible-island.net/access_ssl_log.processed
> logs/lynx.invisible-island.net/access_ssl_log.processed.1.gz
> logs/lynx.invisible-island.net/access_ssl_log.processed.2.gz
> logs/lynx.invisible-island.net/access_ssl_log.processed.3.gz
> logs/lynx.invisible-island.net/access_ssl_log.processed.4.gz
> logs/lynx.invisible-island.net/access_ssl_log.processed.5.gz
> logs/lynx.invisible-island.net/access_ssl_log.webstat
> logs/lynx.invisible-island.net/error_log
> logs/lynx.invisible-island.net/proxy_access_ssl_log
> logs/proxy_access_log
> logs/proxy_access_ssl_log
> logs/proxy_error_log
> logs/xferlog
> logs/xferlog.processed
> logs/xferlog.webstat

関連情報