次のタスクを実行するrsyncコマンドを準備しようとしています。 1. ディレクトリ内のすべてのファイルのバックアップ(ネストしたファイルを除く) 2. 一部のディレクトリのバックアップ
rsync -vtr --delete --exclude='*/' --include='includes/*' --include='js/*' --include='css/*' /home/gameboy/abc/* /home/gameboy/PartialMirror/abc/
ただし、これによりフォルダはコピーされず、ファイルのみがコピーまたは削除されます。コマンドを改善するのに役立ちますか?
答え1
厳密に言えば、以下は矛盾した目標として解釈される可能性があります。
- ディレクトリ内のすべてのファイルをバックアップします。しかし、入れ子になったファイルではありませんつまり、除外='*/'
- 特定のディレクトリバックアップ(例:一部のネストされたファイルを含む)
主張が期待どおりに機能しない理由については、以下の説明を参照してください。以下で、あなたの目的に合った適切な選択肢(#1、#3、#2を満たすバージョン)を確認してください。
コマンドが機能しない理由:
rsyncがコマンドラインパラメータを処理する方法では、次のパラメータは --exclude='*/' と言うのと同じです。
--除外='/'--include='必須サブフォルダ/'
つまり、コマンドは、入れ子になったすべてのファイルと必須サブフォルダのファイルを除外します。
この問題は、ソースから削除されたターゲットのファイルが削除されないという2番目の観察に影響します。実際、あなたのコマンドはそのようなファイルの最上位レベルを削除するのに非常に効果的です。ただし、次のレベルのファイルは除外されたため削除されません。 --delete は --delete-before ではなく --delete-during を表します。
バージョン#1、#3、#2を満たすソリューション: 次のソリューションがお客様のニーズに適している可能性があります。
rsync -avz --delete --include='includes/*' --include='js/*' --include='css/*' --exclude='*/*' /home/gameboy/abc/ /home/gameboy/PartialMirror/abc/
次の条件を満たしています。 1.深さ1のすべてのファイルとディレクトリをバックアップしますが、入れ子になったファイルはバックアップしません。 2. 必要なフォルダをバックアップします。 3. ソースにないファイルをターゲットから削除します。
もう一つの面倒なオプションは次のとおりです。
rsync -vlptgoDd --delete src/ dest/
これは#1と#3を満たしますが、すべてのネストされたファイルを防ぎます(フォルダは* nixのファイルでもあることを覚えておいてください)。再帰的でないように -r オプションを指定しませんでした。アイテムを削除し、深さ1のフォルダをコピーします。タイムスタンプ(-t)の保存に加えて、アーカイブ複製のための他の一般的なオプションも含まれています。
さまざまなフォルダからさまざまなrsync動作を取得するより標準的な方法は、階層を介してディレクトリごとにフィルタリング規則を広げることです。つまり、独自の動作を必要とする各フォルダに固有の.rsync-filterファイルを作成します。例えば
rsync -avF src/ dest/