ある場所から別の場所にディレクトリ構造をコピーする必要があります。フォルダをコピーしてファイルを除外します。
私が入力している間
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
--from0
rsync