#recycle
rsyncを使用してこのディレクトリを除外しようとしています。
$ rsync -Hauv -h -P --exclude '#recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/subDir1/subDir2/
Extension_1/#recycle/subDir1/subDir2/BigVideo.mov
39.23G 82% 36.40MB/s 0:03:44 ^C
$
(私もオプションを引用し.DS_Store*
て削除しようとしましたが、--log-file
違いはありませんでした。)
CentOS 7.9バージョンを使用していますrsync
。3.1.2 protocol version 31
bash
4.2.46(2)-release
より具体的には、除外リストを含む変数を含む非常に小さなスクリプトを作成しました。
$ rsyncExclusionOptions=$(printf -- "--exclude %s " "'#recycle/'" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude '*/#recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/SERIES/mySerie/SOURCES_HD59iDF/EPISODES_666-709/
Extension_1/#recycle/SERIES/mySerie/SOURCES_HD59iDF/EPISODES_666-709/TOEI_myEpisode.mov
3.22G 5% 104.35MB/s 0:08:23 ^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(638) [generator=3.1.2]
rsync: [generator] write error: Broken pipe (32)
rsync error: received SIGUSR1 (code 19) at main.c(1430) [receiver=3.1.2]
EDIT0: @roaima また括弧の間に入れてみました#
(提供したリンクで提案した通り)。ここ)しかし、次のいずれも機能しません。
$ rsyncExclusionOptions=$(printf -- "--exclude %s " "'[#]recycle/'" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude '[#]recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/SERIES/mySerie/SOURCES_HD59iDF/EPISODES_666-709/
Extension_1/#recycle/SERIES/mySerie/SOURCES_HD59iDF/EPISODES_666-709/TOEI_myEpisode.mov
4.04G 7% 21.67MB/s 0:39:45 ^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(638) [generator=3.1.2]
rsync: [generator] write error: Broken pipe (32)
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(504) [receiver=3.1.2]
rsync: [receiver] write error: Broken pipe (32)
考えられる解決策:
- ハッシュ値は、次のように括弧の間に配置する必要があります。
[#]
AND '
変数[#]recycle
内の除外にはextraを使用できませんrsyncExclusionOptions
。
$ rsyncExclusionOptions=$(printf -- "--exclude %s " "[#]recycle/" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude [#]recycle/ --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/SERIES/mySerie/SOURCES_VF/EPISODES_700-765/
答え1
rsync
バージョン3.1.3プロトコル31では、もともと説明した問題を再現できないという言葉でこの質問に答えます。 (Raspbian GNU / Linux 10「ブレーカー」。)
修正された質問は、除外リストが正しくなく、ディレクトリ名と一致しないことを示しています。パターン名に一重引用符を入れましたが、ディレクトリ/ファイル名と一致しません。したがって、除外されません。
元の答えは以下に続きます。
#
しかし、問題を引き起こすファイル名とともに、StackOverflowに報告された解決されていない別のインスタンスが見つかりました。rsync は '#filename#' ファイル名を除外できません。だから、あなたは一人ではありません。たぶん、私が実行している最新バージョンで問題が解決された可能性があります。
想像する
mkdir -p /tmp/718113/Extension_1/#recycle/subDir1/subDir2
cd /tmp/718113
mkdir dst
touch Extension_1/#recycle/subDir1/subDir2/BigVideo.mov
今すぐ注文
rsync -Hauv -h -P --exclude '#recycle/' --exclude '@eaDir/' --exclude '.DS_Store*' --exclude 'desktop.ini' localhost:/tmp/718113/Extension_1 /tmp/718113/dst
出力
receiving incremental file list
Extension_1/
sent 85 bytes received 78 bytes 326.00 bytes/sec
total size is 0 speedup is 0.00
唯一の重要な変更点は、シェルがパターンを拡張する機会がないように除外パターンを引用したことです(具体的には排他的ではありません'.DS_Store*'
)。ただし、この場合でも問題が発生すると、rsync
などのエラーメッセージが表示されますUnexpected remote arg: localhost:/tmp/718113/Extension_1
。rsync error: syntax or usage error (code 1) at main.c(1372) [sender=3.1.3]
--progress
また、(暗黙的-P
)を使用せずにリダイレクトすることをお勧めします。標準出力/標準エラーログファイルに。結果をログファイルに書き込むには、次のように置き換えるか、-P
オプション--partial
を使用します。--log