--include=file オプションを使用すると、RSYNC は何もコピーしません。

--include=file オプションを使用すると、RSYNC は何もコピーしません。

ソースの一部をターゲットにコピーしたいです。

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ファイルセットを制限するために他の基準を適用した可能性があります。)

おすすめ記事