mpdプレイリストは次のとおりです。
ファイル同期.m3u
Bob Dylan - The Times They Are A-Changin' [V0]/04. One Too Many Mornings.mp3
Bob Dylan - The Times They Are A-Changin' [V0]/01. The Times They Are A-Changin'.mp3/
または、フルパスを保存するように設定できます。
同期完了.m3u
/home/share/media/audio/Bob Dylan - The Times They Are A-Changin' [V0]/01. The Times They Are A-Changin'.mp3
/home/share/media/audio/Bob Dylan - The Times They Are A-Changin' [V0]/03. With God On Our Side.mp3
rsync
このファイルを/media/sdg/MUSICに保存したいと思います。プレイリストからファイルを削除したら、保存先からファイルを削除したいと思います。
私はその注文を正確に理解できませんでした。昨夜はうまくいったと思いましたが、やり直してみたらうまくいきません。私がinclude-from
考えることができるすべての組み合わせを試してみました。exclude=*
答え1
基本的なアプローチは次のとおりです(参照:このrsyncフィルタガイドより多くの情報を知りたい場合):
- プレイリストにファイルを含めます。
- すべてのディレクトリが含まれ(それ以外の場合は何もコピーされません)、他のすべてのディレクトリは除外されます。
- 同期されていないファイルと空のディレクトリを削除する
したがって(テストされていません):
rsync -a --include-from=/path/to/syncrel.m3u --include='*/' --exclude='*' \
--delete --delete-excluded --prune-empty-dirs \
/home/share/media/audio/ /media/sdg/MUSIC
ファイル名にワイルドカード文字の1つが含まれていると*?[
複雑になります。これらの文字の前にはバックスラッシュを追加する必要があります。ファイル名にバックスラッシュがある場合は、前にバックスラッシュが必要ですが、他のワイルドカードがある場合にのみ可能です。以下は、ファイル名のリストを予想される形式に変換するsedフラグメントです(ファイル名にバックスラッシュがない場合は、最初の式のみが必要です)。
sed -e 's/[*?\[]/\\&/g' -e 's/[*?[]/&/' -e T -e 's/\\\\/\\/g'
bash、ksh、またはzshには、ファイルリストをrsyncに渡す前にフィルタリングする便利な方法があります。
rsync -a --include-from=<(</path/to/syncrel.m3u sed -e 's/[*?\[]/\\&/g') \
--include='*/' --exclude='*' \
--delete --delete-excluded --prune-empty-dirs \
/home/share/media/audio/ /media/sdg/MUSIC