Rsync にはフォルダとリンクが含まれますが、ファイルは除外されます。

Rsync にはフォルダとリンクが含まれますが、ファイルは除外されます。

ある場所から別の場所にディレクトリ構造をコピーする必要があります。フォルダをコピーしてファイルを除外します。

最大の問題は、フォルダを接続したことです! ここに画像の説明を入力してください。

私が入力している間

rsync -avz -H  /tmp/test/ /tmp/copy/

フォルダとリンクされたフォルダを正しくコピーし、ファイルもコピーします。

私が入力している間

rsync -avz -H -f"+ */" -f"- *" /tmp/test/ /tmp/copy/

これにはすべてのフォルダが含まれ、ファイルは除外されますが、リンクされたフォルダも除外されます。

私が入力している間

rsync -avz -H -f"+ */" -f"- *.txt" /tmp/test/ /tmp/copy/

フォルダに関連付けられたフォルダを正しく作成しますが、txtファイルのみを除外します。

私が入力している間

rsync -vzrptgoD -L -H -f"+ */" -f"- *" /tmp/test/ /tmp/copy/

ファイルは除外しますが、リンクされたフォルダを物理フォルダに変換し、パスのみをリンクします。

ファイルの種類が多いため、-f"- *.txt"のように追加できません。

どうすればいいですか? -f"+ */"に関連付けられたフォルダ構文を追加できますか?

そうでない場合、他のオプションはありますか?

答え1

rsyncフィルタリングルールはディレクトリだけが「他のすべて」と区別されるため、これを直接行うことはできません。

ただし、find必要な項目(lシンボリックリンク、dディレクトリ)を選択するコマンドを設定し、そのリストをコピーに渡すことがrsyncできます。

find src/ \( -type l -o -type d \) -printf "%P\0" |
    rsync --files-from - --from0 -av src/ dst/

想像する

mkdir /tmp/608951
cd /tmp/608951
mkdir -p src/{test1,test2} dst; ln -s test1 test/link

デモ、ディレクトリ、シンボリックリンクのsrcコピーdst

find src/ \( -type l -o -type d \) -printf "%P\0" | rsync --files-from - --from0 -av src/ dst/

出力

building file list ... done
link -> test1
test1/
test2/

sent 134 bytes  received 25 bytes  318.00 bytes/sec
total size is 5  speedup is 0.03

証拠、使用法ls -R src dst、ショーdstにはディレクトリとシンボリックリンクのみが含まれていますが、srcファイルも含まれています。

dst:
link  test1  test2

dst/test1:

dst/test2:

src:
link  test1  test2

src/test1:
file1

src/test2:
file2

GNUがない場合は、一般にfind変更してから変更してください。欠点は、名前に奇妙な文字(改行文字など)を含むファイルをコピーできないことです。-printf "%P\n"-print--from0rsync

関連情報