ソースの一部をターゲットにコピーしたいです。
SRC_DIR=/a/b/c/d/e
DEST_DIR=/x/y/z/d/e
スクリプトが起動すると、次の場所にすべてのフォルダが作成されます$DEST_DIR
。
mkdir -pv /x/y/z/d/e
ソースの相対パスのリストがあり、これがe
コピーする最初のサブパスです。リストは、次のようにfindコマンドの出力から作成されます。
/USER_CONFIG_COPY/G731GV/REAL/2023_06_17_22h11/user_install/root
....
....
/002_DATA/SSH/2023_09_01.prev/root
....
....
....
/002_DATA/USER_CONFIG_INITIAL/root
....
....
....
....
/001_SCRIPTS/000_TOOLS/root
....
....
包含リストを作成するには、まず親フォルダを配置し、次に検索出力から取得したリストを配置します。リストは次のとおりです。
/a
/a/b
/a/b/c
/a/b/c/d
/a/b/c/d/e
/USER_CONFIG_COPY/G731GV/REAL/2023_06_17_22h11/user_install/root
....
....
/002_DATA/SSH/2023_09_01.prev/root
....
最後のコマンドは次のとおりです。
rsync -arzh -vvv --include='/tmp/000_my_include_root_dirlist.txt' --exclude='*' "$SRC_DIR/" "$DST_DIR/"
U&L Stack Exchangeで見つけた多くのヒントを試しましたが、成功しませんでした。私は何が間違っていましたか?
さて、Chrisの提案は小さなフォルダセットに適用されます。私の問題は、--recursiveオプションが欠落しており、フォルダの固定ビットを使用しているために発生します。完全なテストをしてみます。できるだけ早くお知らせいたします。
ベストアンサー1
オプションにはコンテンツ以外の--include='/tmp/000_my_include_root_dirlist.txt'
ファイルが含まれます。"$SRC_DIR/tmp/000_my_include_root_dirlist.txt"
おそらくあなたは望むでしょうし、--files-from
両方--include
を望んでいません--exclude
:
rsync --dry-run -ah -vv --files-from='/tmp/000_my_include_root_dirlist.txt' "$SRC_DIR/" "$DST_DIR"
次に、ファイルリストから最初のグループを削除し、リストされている/a
残りのファイルに1行に1つずつ相対パスがあることを確認します。たとえば、代表します。/a/b/c/d/e
$SRC_DIR
/my_file.txt
"$SRC_DIR/my_file.txt"
私はそれが何をするかを示すために--dry-run
それを追加しました。rsync
実装する準備ができたら、このオプションを削除してください。また、.and-r
の一部だったので、重複したコンテンツを削除しました。ローカルにコピーすると意味がないからです。-a
-z
また、コピーするファイルのリストを直接作成できますが、コピーするファイルのリストを作成したいと思う理由は少し混乱しますrsync
。 (find
ファイルセットを制限するために他の基準を適用した可能性があります。)