ソースの一部をターゲットにコピーしたいです。
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
ファイルセットを制限するために他の基準を適用した可能性があります。)
答え2
あなたが言ったように、そしてUSER_CONFIG_COPY
が002_DATA
の001_SCRIPTS
サブディレクトリであるならば、あなたはその項目を前に e
置かないでください(例えば)。 " "はこのディレクトリにあることを意味します。/
/USER_CONFIG_COPY
/USER_CONFIG_COPY
USER_CONFIG_COPY
根目次。
cd
実行し/a/b/c/d/e
て実行すると、次find
のような結果が表示されます。
./USER_CONFIG_COPY/G731GV/REAL/2023_06_17_22h11/user_install/root
︙
︙
︙
./002_DATA/SSH/2023_09_01.prev/root
︙
︙
︙
これ .
最初のsは装飾用ではありません。ただ置くことはできません。これは、パスが次に関連付けられていることを示します。.
、現在のディレクトリ(つまり/a/b/c/d/e
)です。
同様に実行すると、次のような結果が得られます。find "$SRC_DIR/" criteria
/a/b/c/d/e/USER_CONFIG_COPY/G731GV/REAL/2023_06_17_22h11/user_install/root
︙
︙
︙
/a/b/c/d/e/002_DATA/SSH/2023_09_01.prev/root
︙
︙
︙
パイプと仮定するsed 's#^'$PATH_INCLUDE_FROM'##'
と、$PATH_INCLUDE_FROM
表示/a/b/c/d/e
される出力も得られます。これも間違っています。引用した場合、/a/b/c/d/e/USER_CONFIG_COPY/...
1行に入れて次の行に入れるのは正しいことではありません。各行は有効なファイル名でなければなりません。/a/b/c/d/e
/USER_CONFIG_COPY/...
さて、
- 同じディレクトリを参照する2つの変数(
SRC_DIR
および)があるのはなぜですか?PATH_INCLUDE_FROM
's#^'$PATH_INCLUDE_FROM'##'
文法エラー。代わりに"s#^$PATH_INCLUDE_FROM##"
(二重引用符を含む)を使用してください"
。