.mp3ファイルを含むフォルダのみを別のデバイスにコピーしようとしています。そして.mp3のみ。構造は次のとおりです。
Band/Year - Album/*.flac
Band/Year - Album/*.txt
Band/Year - Album/*.mp3
Band/Year - Album/covers
Band/Year - Album/covers/*.jpg
多くのマニュアルやフォーラムを読んでいますが、問題を解決することはできません。私が何をしても、コピーに入れたいものをどのように定式化しようとしても、それは除外されるので、消えたりする。
--exclude=* --include=*
何もコピーされません。ディレクトリなしで別のディレクトリでテストしました。くそー。
編集:私が試したが役に立たなかったリスト:
rsync -rnv --exclude=** --include=*/ --include=*/*/ --include=*/*/*/ --include=*/*/*.mp3 "./Be'lakor" /media/moorindal/WALKMAN/MUSIC
rsync -rnv --exclude=** --include=*/ --include=*/*/ --include=*/*/*/ --include=**.mp3 "./Be'lakor" /media/moorindal/WALKMAN/MUSIC
rsync -rnv --exclude=** --include=*/ --include=*/* --include=**.mp3 "./Be'lakor" /media/moorindal/WALKMAN/MUSIC
rsync -rnv --exclude=*/*/* --include=**.mp3 "./Be'lakor" /media/moorindal/WALKMAN/MUSIC
rsync -rnv --exclude=*/*/*.* --include=**.mp3 "./Be'lakor" /media/moorindal/WALKMAN/MUSIC
rsync -rnv --exclude='*/*/*.*' --include='*/*/*.mp3' "./Be'lakor" /media/moorindal/WALKMAN/MUSIC
ベストアンサー1
まず、--exclude=* --include=*
機能しない理由:最初の一致ルールが適用されるためです。*
すべてと一致するため、すべてが除外され、rsyncはどのファイルでも2番目のルールを試みません。バラよりRsyncフィルタ:1つのパターンのみをコピーrsync フィルタのガイドです。
.mp3
必要なファイルを含めるには
rsync -a -m --include='*.mp3' --include='*/' --exclude='*'
つまり、MP3を含み、すべてのディレクトリを含み(ディレクトリが含まれていない場合はディレクトリにファイルは含まれません)、他のすべてのエントリを除外します。この-m
オプション(別名--prune-empty-dirs
)を使用すると、rsyncはコピーするファイルが含まれていないディレクトリをスキップします。ただし、.mp3
このファイルと同じディレクトリにある他のファイルは含まれません。これを行うには、シェルや他のツールの助けが必要です。
zshでは、.mp3
サブディレクトリのファイルを一致させて**/*.mp3
から使用できます。履歴修飾子としてグローバル予選結果を.mp3
ファイルを含むディレクトリのリストに変換します。
rsync -a **/*.mp3(:h) /destination
ディレクトリが多すぎる場合(またはより正確には、名前を合わせた長さが大きすぎる場合)、コマンドラインの制限が壊れる可能性があります。重複したアイテムを削除すると役に立ちます。
typeset -aU directories
directories=(**/*.mp3(:h))
rsync -a $directories /destination
これは、コマンドが長すぎるリスクを排除するのではなく、コマンドの長さを短くするだけです。リスクを排除するには、次のようにします。zargs
rsync を一括実行します。
autoload -U zargs
typeset -aU directories
directories=(**/*.mp3(:h))
do_rsync () { rsync -a $@ /destination; }
zargs --max-chars=$(($(get_conf ARG_MAX) - 500)) -- $directories -- do_rsync