두 위치에 대한 참조로 직접 상위 폴더를 사용하여 소스에서 대상으로 전체 디렉터리를 복사합니다.

두 위치에 대한 참조로 직접 상위 폴더를 사용하여 소스에서 대상으로 전체 디렉터리를 복사합니다.

**

  • 질문 1:

** 전제조건: 원본과 대상의 디렉터리 이름이 동일해야 합니다. 이름이 아니라 디렉토리의 깊이 수준이 다를 수 있습니다.

소스 및 대상 구조에 대한 참고 사항:

  1. SampleFolder 및 Project1은 경로의 유일한 공통 부분입니다.
  2. 복사해야 할 디렉터리가 여러 개 있습니다.
  3. 디렉터리는 동일한 경로에 있는 대신 한 수준 깊이, 두 수준 깊이일 수 있으므로 기본적으로 파일을 복사하기 전에 참조 폴더를 검색해야 합니다.
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

관련 정보