rsync가 내가 원하는 방식으로 대상 폴더를 생성하지 않습니다.

rsync가 내가 원하는 방식으로 대상 폴더를 생성하지 않습니다.

다음 텍스트 파일이 있습니다

...
/a/b/c/f1
/a/b/c/f2
...
/a/b/c/d1
...

어디에 f1f2파일은 d1있지만 디렉토리입니다. 정확한 계층 구조를 대상 폴더( )에 복사하고 싶습니다 /z.

Bash를 사용하면 lr텍스트 파일에서 읽은 모든 줄에 대해 내 스크립트가 실행됩니다(단순화를 위해 이러한 옵션은 생략했습니다).

rsync $lr/ /z/$lr

/z/a/b/c/d1결과를 파일에 대해 .Unfortunately(안타깝게도) 얻으면 폴더가 올바르게 복사됩니다 .

/z/a/b/c/f1/f1
/z/a/b/c/f2/f2

rsync파일 및 디렉터리에 대해 위와 동일한 호출을 사용하여 이 문제를 어떻게 해결할 수 있습니까?

답변1

파일을 수동으로 재동기화하지 마세요. --files-from=텍스트 파일을 포함하려면 이 옵션을 사용하십시오 .

디렉토리 규칙:

  • 경로가 후행으로 끝나지 않는 경우에만 디렉터리를 생성합니다./
  • 디렉토리의 내용을 동기화하려면 후행 /또는 옵션 --recursive/ -r또는를 추가하십시오.

옵션을 사용 -a하고 재귀를 원할 경우 -r추가로 추가해야 합니다. 파일의 경로가 소스 디렉토리에 상대적인지 확인하십시오(선두 포함 또는 제외 /).

입력의 최소 예는 다음과 같습니다.

rsync --files-from=textfile / /z

텍스트 파일을 미리 수정/필터링해야 하는 경우 이를 stdin에서 rsync로 전달할 수 있습니다.

your_command textfile | rsync --files-from=- / /z

답변2

당신의 명령을 보자 rsync. 옵션을 생략하셨습니다. 이것이 중요합니다. 따라서 -a( --archive) 또는 -rt( ) 를 사용한다고 가정하고 --recursive --times편의를 위해 -v( )도 추가하겠습니다 --verbose.

다음 텍스트 파일에서 소스 파일을 읽고 있습니다.

/a/b/c/f1
/a/b/c/f2
...
/a/b/c/d1

텍스트 파일의 각 줄을 읽는 다음 템플릿이 있습니다 $lr.

rsync $lr/ /z/$lr

템플릿 명령에 해당 라인 f1합계를 적용 d1하고 결과를 살펴보겠습니다.

mkdir -p /tmp/733765
cd /tmp/733765
mkdir -p a/b/c/d1
touch a/b/c/{f1,f2,d1/f3} z

rsync -av a/b/c/f1/ z/a/b/c/f1
rsync -av a/b/c/d1/ z/a/b/c/d1

우리는 우리에게 보여진 정보를 바탕으로 다음과 같은 사실을 즉시 알 수 있습니다.문서 f1복사되지 않습니다. 대신에 이 오류가 발생합니다.

rsync: [sender] change_dir "/tmp/733765/a/b/c/f1" failed: Not a directory (20)

대상에서 볼 수 있다면 f1다른 솔루션(아마도 이전 시도)을 사용하여 복사되었을 것입니다 rsync.

마찬가지로 d1디렉터리 경로를 이미 생성하지 않은 한 대상에 복사되지 않습니다 z/a/b/c.

rsync: [Receiver] mkdir "/tmp/733765/z/a/b/c/d1" failed: No such file or directory (2)

mkdir -p z/a/b/c
rsync -av a/b/c/d1/ z/a/b/c/d1

created directory z/a/b/c/d1
./
f3

sent 122 bytes  received 71 bytes  128.67 bytes/sec

귀하의 질문에 있는 정보 중 일부가 올바르지 않습니다. 해당 명령을 무시 rsync하고 소스 데이터세트에 초점을 맞추면 다음을 rsync사용하여 소스 데이터세트를 직접 읽을 수 있습니다.

rsync --files-from /path/to/source_data_file -arv . z/

-a일반적으로 include 를 사용하고 있기 때문에 이는 다소 이상하게 보일 수 있습니다 -r. 그러나 --files-from소스 데이터 파일에 디렉토리를 사용하고 지정했기 때문에 나열된 소스 디렉토리에 대한 재귀를 -r알리기 위해 명시적으로 지정 해야 합니다. rsync(이것이 없으면 이름이 지정된 파일만 복사할 수 있습니다.)

관련 정보