rsync 除外およびインクルードの問題には、除外ディレクトリにファイルが含まれます。

rsync 除外およびインクルードの問題には、除外ディレクトリにファイルが含まれます。

を使って次のことをしたいと思いますrsync

ディレクトリ構造の例

  • ホーム/netadmin/docker-data
  • ホーム/netadmin/docker-data/uptime-kuma/
  • ホーム/netadmin/docker-data/uptime-kuma/error.log

rsyncディレクトリがdocker-data欲しいが、home/netadmin/docker-data/uptime-kuma/ディレクトリを除外したいがhome/netadmin/docker-data/uptime-kuma/error.log

次のコマンドを使用しています。

rsync -av --delete --include-from='/home/netadmin/include.txt' --exclude-from='/home/netadmin/exclude.txt' /home/netadmin/docker-data /home/netadmin/temp/

ディレクトリは除外されますが、ファイルはコピーされません。

私の質問はこれが可能ですか?

私のインクルードと除外ファイルは次のとおりです。

除外.txt

uptime-kuma/

.txtを含みます

+ error.log

答え1

その「トリック」はいいえディレクトリは除外しますuptime-kumaが、内容は除外しません。

インクルードおよび除外パターンを使用すると、error.logそのサブディレクトリ内の他のすべてのエントリを除外する前にuptime-kuma/*ファイルを含めることができます。uptime-kuma/error.log

uptime-kuma/代わりにを使用すると、uptime-kuma/*ディレクトリを除いてrsyncディレクトリ内を決して表示できません。

rsync -av --delete \
    --include=error.log \
    --exclude='uptime-kume/*' \
    ~netadmin/docker-data ~netadmin/temp/

私はこれが同等のテストになることを願っています:

$ tree
.
`-- topdir
    |-- file-1
    |-- file-2
    |-- file-3
    |-- file-4
    |-- file-5
    `-- subdir
        |-- file-a
        |-- file-b
        |-- file-c
        |-- file-d
        |-- file-e
        `-- myfile

2 directories, 11 files
$ rsync -av --include=myfile --exclude='subdir/*' topdir/ copydir
sending incremental file list
created directory copydir
./
file-1
file-2
file-3
file-4
file-5
subdir/
subdir/myfile

sent 436 bytes  received 171 bytes  1,214.00 bytes/sec
total size is 0  speedup is 0.00
$ tree copydir
copydir
|-- file-1
|-- file-2
|-- file-3
|-- file-4
|-- file-5
`-- subdir
    `-- myfile

1 directory, 6 files

ヒント:rsync使用すると、どの項目が含まれているか除外される理由を理解できます-vv

「error」を使用した除外パターンは次のとおりです。

$ rm -r copydir
$ rsync -avv --include=myfile --exclude='subdir/' topdir/ copydir
sending incremental file list
[sender] hiding directory subdir because of pattern subdir/
created directory copydir
delta-transmission disabled for local transfer or --whole-file
./
file-1
file-2
file-3
file-4
file-5
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 326 bytes  received 211 bytes  1,074.00 bytes/sec
total size is 0  speedup is 0.00

これは「正しい」除外パターンを使用しています。

$ rm -r copydir
$ rsync -avv --include=myfile --exclude='subdir/*' topdir/ copydir
sending incremental file list
[sender] hiding file subdir/file-a because of pattern subdir/*
[sender] hiding file subdir/file-b because of pattern subdir/*
[sender] hiding file subdir/file-c because of pattern subdir/*
[sender] hiding file subdir/file-d because of pattern subdir/*
[sender] hiding file subdir/file-e because of pattern subdir/*
[sender] showing file subdir/myfile because of pattern myfile
created directory copydir
delta-transmission disabled for local transfer or --whole-file
./
file-1
file-2
file-3
file-4
file-5
[generator] risking file subdir/myfile because of pattern myfile
subdir/
subdir/myfile
total: matches=0  hash_hits=0  false_alarms=0 data=0

sent 436 bytes  received 307 bytes  1,486.00 bytes/sec
total size is 0  speedup is 0.00

答え2

別の方法が見つかりました。私は使う

cp --parents

私が望む除外ディレクトリ内の特定のファイルだけをコピーし、ディレクトリ構造を維持するオプションです。

関連情報