rsync는 폴더 외부의 모든 파일을 제외하고 특정 폴더와 해당 내용 및 구조를 보존합니다.

rsync는 폴더 외부의 모든 파일을 제외하고 특정 폴더와 해당 내용 및 구조를 보존합니다.

내 파일 시스템은 다음과 같습니다.

원천/

folder1/
  subfolder/
    contents
  other_subfolders
  file1
  file2
folder2/
  subfolder/
    contents
  other_subfolders
  file1
  file2
folder3/
  subfolder/
    contents
  other_subfolders
  file1
  file2
file1
file2

내가 복사하고 싶은 거의 모든 것은 이것이다:

folder1/
  subfolder/
    contents
folder2/
  subfolder/
    contents
folder3/
  subfolder/
    contents

즉, 난 그냥 계속 갖고 싶어

  • 폴더 구조
  • 하위 폴더 및 해당 내용 복사
  • 하위 폴더 외부의 파일이나 하위 폴더 외부의 다른 폴더를 무시합니다.

현재 나는 노력하고 있습니다 :

$cd destination
$rsync -atvr --include="*/subfolder/" --exclude="*" source/ .

넣어서 --exclude="*"포함에 넣은 것, 즉 */subfolder/소스의 최상위 폴더 안에 있는 하위 폴더라는 폴더를 제외한 모든 것을 제외하고 싶습니다.

그러나 파일은 복사되지 않습니다. 왜? 내가 무엇을 놓치고 있나요?

나도 시도했다

$cd destination
$rsync -atvr --include="*/subfolder/" --exclude="*/*" source/ .

하지만 이렇게 하면:

folder1/
  subfolder/
folder2/
  subfolder/
folder3/
  subfolder/
file1
file2

즉, 파일을 원본(외부 폴더)에 유지하고 필요한 하위 폴더를 생성하되 해당 내용을 복사하지 마십시오.

편집: Siva의 요청에 따라 퍼팅 후rsync -av --include='/' --include='/subfolder**' --exclude='*' source/ .

나는 얻다:

시스템에 접속하세요:

1) SSH 키를 사용하지 않는 경우 비밀번호 프롬프트에 TACC 비밀번호를 입력하세요. 2) TACC 토큰 프롬프트에 6자리 코드를 입력하고 를 입력하세요.

Password:
TACC Token Code:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "C.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
receiving incremental file list
./

sent 59 bytes  received 104 bytes  10.52 bytes/sec
total size is 3,242  speedup is 19.89

하지만 약속합니다. 이 모든 경고는 현재 문제와 관련이 없으며 어떤 방식(ssh, scp, rsync, ...)으로 서버에 액세스하려고 할 때마다 팝업됩니다.

답변1

복사할 소스 파일 세트를 지정하기 위해 상대 경로를 사용하면 --include잠재적인 복잡함을 피할 수 있습니다.--exclude

상상하다

최상위 디렉터리에 샘플 디렉터리와 파일 구조를 만듭니다 src. 선택한 콘텐츠를 최상위 디렉터리에 복사합니다.dst

mkdir -p src/folder{1,2,3}/{subfolder,other_subfolders} dst
touch src/folder{1,2,3}/subfolder/contents src/{folder{1,2,3}/,}file{1,2}
find src | LC_ALL=C sort

rsync --dry-run -avR src/./folder*/*/* dst/

산출(에서 rsync)

sending incremental file list
folder1/
folder1/subfolder/
folder1/subfolder/contents
folder2/
folder2/subfolder/
folder2/subfolder/contents
folder3/
folder3/subfolder/
folder3/subfolder/contents

/./소스 경로의 나머지 부분이 대상에서 사용될 지점을 표시합니다 . --dry-run선택한 작업을 수행하려면 삭제하세요 .

답변2

남성의 경우:

패턴에 /(후행 /는 계산되지 않음)가 포함되어 있으면 전체 경로 이름과 일치합니다.주요 디렉토리 포함.

다음과 같이 시도해보세요.

 rsync -av --include='/' --include='/subfolder**' --exclude='*' source/ destination/

관련 정보