rsyncは、ポンド文字(#)で始まる指定されたディレクトリを除外しません。

rsyncは、ポンド文字(#)で始まる指定されたディレクトリを除外しません。

#recyclersyncを使用してこのディレクトリを除外しようとしています。

$ 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バージョンを使用していますrsync3.1.2 protocol version 31bash4.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_1rsync error: syntax or usage error (code 1) at main.c(1372) [sender=3.1.3]

--progressまた、(暗黙的-P)を使用せずにリダイレクトすることをお勧めします。標準出力/標準エラーログファイルに。結果をログファイルに書き込むには、次のように置き換えるか、-Pオプション--partialを使用します。--log

おすすめ記事