rsyncトランスポートでスペース(および特殊文字)を置き換える方法は?

rsyncトランスポートでスペース(および特殊文字)を置き換える方法は?

私はrsyncを使用して、Syncthingを介して他のデバイスと同期しているフォルダ(意図的に省略されたディレクトリ)にいくつかのファイルをコピーします。

find /mnt/media/ -name "*.epub" > /home/user/.logs/rsync/epub-paths.txt && \
rsync --archive --files-from=/home/user/.logs/rsync/epub-paths.txt  \
--no-relative / /home/user/Documents/ebooks/

これらのファイルは私が作成したものではなく、ファイル名にスペースと文字が含まれることが多く、シェルで問題になります。悲しいことにマウントされたソースドライブのすべての名前を簡単に変更することはできません

使う予定ですデトックスターゲット電子ブックディレクトリは再帰的に処理されますが、プログラムは既存のファイルを置き換えません。この場合、ファイルはすべて同じです。残念ながら、すべての重複エントリを削除しても、rsyncはスクリプトを実行するたびに(現在毎日)ギガバイトのデータを無駄に送信します。使用デュピュあるいは、後で重複ファイルを削除する同様の方法は、実用的な解決策ではありません。


つまり、ローカルデータを変更するのではなく、ターゲットに書き込む前にrsync転送にファイル名(およびフォルダがある場合)を書き換えてください。

ベストアンサー1

NULL で終わるパラメーターを使用することもできます。

find /mnt/media/ -name '*.epub' -print0 |
    rsync -as --files-from=- --from0 --no-relative / /home/user/Documents/ebooks

またはfind、POSIXを使用していてオプションがない場合は、-print0少し包括的な次のソリューションを試してください。

find /mnt/media/ -name '*.epub' |
    rsync -as --files-from=- --no-relative / /home/user/Documents/ebooks

おすすめ記事