**
- 質問1:
**前提条件:ソースとターゲットのディレクトリ名は同じでなければなりません。名前ではなく、ディレクトリの深さレベルが異なる場合があります。
ソースとターゲットの構造に関する注意:
- SampleFolderとProject1はパスの唯一の共通部分です。
- コピーするディレクトリが複数あります。
- ディレクトリは同じパスにある代わりに1レベルの深さ、2つのレベルの深さにすることができるため、デフォルトではファイルをコピーする前に参照フォルダを検索する必要があります。
mydir
|__ sampleFolder/fil.txt
|__ Project1/fil2.txt
desDir
|__ some_path/More_path/sampleFolder/
|__ some_path/More_path/some_more_path/Project1/
目的:フォルダ内のファイルをmydir/sampleFolder/file.txt
次の場所にコピーします。desDir/some_path/sampleFolder/file.txt
注:ソースパスとターゲットパスのパス階層は異なりますが、sampleFolder
同じです。
注文する
find $HOME/mydir/ -type f -name *.txt -exec sh -c 'cp {}' 'find $HOME/des_dir -type d -path `echo $(dirname -- {}) | sed s"~$HOME/mydir~~g"`' sh {} \;
コマンド分析 1: 親ディレクトリをインポートし、検索され$HOME/mydir
た*.txt
ファイルパスから削除します。
echo $(dirname -- {}) | sed s"~$HOME/mydir~~g"
コマンド分解2:コマンド分解1を実行した後、受信した文字列と一致するパスを検索します。
find $HOME/des_dir -type d -path
コマンド分析3:これは非常に一般的です(おそらく)
find $HOME/mydir/ -type f -name *.txt -exec sh -c 'cp {}'
**
- 質問2
**以下のコマンドを使用して問題1を解決しました。 cygwinでスタンドアロンコマンドで実行すると正常に動作します。
find $HOME/MY_DIR/ -type d -name data -exec sh -c 'rsync -avz {} `find $HOME/DES_DIR-type d -name $(basename $(dirname -- {}))`' sh {} \;
ただし、このコマンドをシェルスクリプトで使用してcygwinでスクリプトを実行すると、エラーが発生します。
protocol version mismatch - is your shell clean?
(see the rsync man page for an explanation)
rsync error: protocol incompatibility (code 2) at compat.c(60)
ベストアンサー1
やりたいことは多少曖昧ですが、rsync
ディレクトリ全体をコピーする予定であれば適切です。
例えば
$ rsync -avz level2 level3/test/
sending incremental file list
level2/
level2/out.txt
level2/rds.aws.test.lambda.json
sent 380 bytes received 58 bytes 876.00 bytes/sec
total size is 341 speedup is 0.78
$ ls level3/test/
level2
$ ls level3/test/level2/
out.txt rds.aws.test.lambda.json
*.txt ファイルのみが必要で、ディレクトリ構造を維持する場合は、R
rsync にオプションを追加する必要があります。
$ rsync -avzR level2/*.txt level3/test2
sending incremental file list
level2/
level2/out.txt
sent 178 bytes received 39 bytes 434.00 bytes/sec
total size is 65 speedup is 0.30
$ ls level3/test2/level2/
out.txt