両方の場所への参照として直接親フォルダを使用して、ソースからターゲットにディレクトリ全体をコピーします。

両方の場所への参照として直接親フォルダを使用して、ソースからターゲットにディレクトリ全体をコピーします。

**

  • 質問1:

**前提条件:ソースとターゲットのディレクトリ名は同じでなければなりません。名前ではなく、ディレクトリの深さレベルが異なる場合があります。

ソースとターゲットの構造に関する注意:

  1. SampleFolderとProject1はパスの唯一の共通部分です。
  2. コピーするディレクトリが複数あります。
  3. ディレクトリは同じパスにある代わりに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 ファイルのみが必要で、ディレクトリ構造を維持する場合は、Rrsync にオプションを追加する必要があります。

$  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

おすすめ記事