Rsync - 분할 폴더/하위 폴더 구조

Rsync - 분할 폴더/하위 폴더 구조

저는 openmediavault(OMV는 openmediavault.org의 NAS 소프트웨어)를 사용하고 있으며 다른 공유가 정의되어 있습니다. 공유 중 하나에는 다음과 같은 폴더 구조가 있습니다. (예)

Subfolder"ABC"/Subsubfolder"SWU"/*.*Files   
Subfolder"ABC"/Subsubfolder"SXY"/*.*Files
Subfolder"ABC"/Subsubfolder"ZWE"/*.*Files   
Subfolder"BCD"/Subsubfolder"SWU"/*.*Files
Subfolder"CDE"/Subsubfolder"ABC"/*.*Files   
Subfolder"TXY"/Subsubfolder"SWU"/*.*Files

OMV 내에서 rsync를 통해 두 개의 다른 공유로 분할하고 싶지만 include/exclude를 사용하는 데 문제가 있습니다. rsync 사용 가능성은 제한되어 있지만 OMV-Rsync GUI에는 include/exclude 문을 입력할 수 있는 추가 옵션 필드가 있습니다. 오마비

하위 폴더로 분할하고 싶습니다. 하위 폴더가 한 부분으로 "0"에서 "Sj"로 시작하고 다른 부분은 "Sk"에서 "Z"로 시작하고 싶습니다.

난 이미 시도했어

--exclude={/S[k-z]*/,/[T-z]*/} 

그러나 이는 예상대로 작동하지 않았습니다. 테스트 실행에서는 예를 들어 Zur/S056776/ 폴더의 파일도 동기화되어 있음을 보여줍니다.

답변1

편집된 질문과 일치하도록 답변이 편집되었습니다.

다음 제외 패턴을 시도해 볼 수 있습니다. 디렉터리를 공용 폴더 위로 변경하고 folder실제 공용 폴더 이름과 일치하도록 패턴을 수정합니다.

--exclude={/folder/S[k-z]*/,/folder/[T-z]*/}

시도한 패턴이 왜 작동하지 않는지 모르겠습니다(그러나 작동하지 않는 디렉토리를 정확히 표시하면 문제를 찾는 데 도움을 줄 수 있습니다).

--exclude={/S[k-z]*/,/[T-z]*/}

편집 2,3 - Linux OS를 실행하는 NAS 서버

NAS 서버는 Linux 운영 체제를 실행합니다. openmediavault, OMV를 다운로드하여 테스트했습니다. ssh서버를 실행하고 있으며 rsync컴퓨터와 서버간에 파일을 전송하고 서버에 텔넷을 전송하고 ssh서버 내에서 실행하기 위해 실행될 수 있습니다.rsync

  • 로그인 정보를 변경하지 않은 경우

웹 인터페이스

User: admin
Password: openmediavault

클라이언트(SSH, 콘솔)

User: root
Password: <The password that you have set during installation>
  • 터미널 창을 열고 다음을 통해 연결하세요.ssh

    ssh root@ip-address-to-your-server
    # example: ssh [email protected]  # if local
    
  • 키 인증을 사용하여 rsync서버에 로그인하거나 실행하십시오.

  • 서버에서 명령 실행

    cd 'path-to-directory-above-folder'
    
    mkdir target1  # only once, or use a target above your current directory
    mkdir target2  #               -"-
    
    rsync -Havn --exclude={/target*/,/folder/S[k-z]*/,/folder/[T-z]*/} * target1
    rsync -Havn --exclude={/target*/,/folder/[0-R]*/,/folder/S[0-j]*/} * target2
    
  • 다른 명령을 실행하여 모든 것이 괜찮은지 확인할 수 있습니다.

    for i in $(find folder);do test -e "${i/folder/target1\/folder}" || test -e "${i/folder/target2\/folder}" || echo "$i not copied";done
    
  • 완료되면 서버에서 로그아웃합니다(제 경우에는 사용자 myself및 에서 root).

    exit
    

    여기에 이미지 설명을 입력하세요.

원래 답변

잘 모르겠지만 나는생각하다다음 명령줄은 원하는 것을 생성합니다.

테스트 디렉터리에는 테스트를 위해 여러 하위 디렉터리와 파일에 target1, target2, folder, 및 하위 디렉터리를 만들었습니다.folder

rsync -Havn --exclude={/target*/,/folder/S[k-z]*/,/folder/[T-z]*/} * target1

rsync -Havn --exclude={/target*/,/folder/[0-R]*/,/folder/S[0-j]*/} * target2
  • 먼저 -n"모의 실행" 옵션(여기에 표시된 대로)을 사용하여 실행하여 수행할 작업을 확인합니다.
  • 그런 다음 (아마도 수정 후) 원하는 작업을 수행하면 디렉터리 구조를 삭제 -n하고 대상 디렉터리에 복사합니다.rsync

다음 디렉터리 트리를 사용하여 테스트했습니다.

$ find |sort
.
./folder
./folder/ABC
./folder/ABC/SWU
./folder/ABC/SWU/file
./folder/ABC/SXY
./folder/ABC/SXY/file
./folder/ABC/ZWE
./folder/ABC/ZWE/file
./folder/AIB
./folder/AIB/Sja
./folder/AIB/Sja/file
./folder/AIB/Skb
./folder/AIB/Skb/file
./folder/AIB/SWU
./folder/AIB/SWU/file
./folder/BCD
./folder/BCD/SWU
./folder/BCD/SWU/file
./folder/CDE
./folder/CDE/SWU
./folder/CDE/SWU/file
./folder/Sja
./folder/Sja/Skb
./folder/Sja/Skb/file
./folder/Sja/SWU
./folder/Sja/SWU/file
./folder/Skb
./folder/Skb/Sja
./folder/Skb/Sja/file
./folder/Skb/SWU
./folder/Skb/SWU/file
./folder/TXX
./folder/TXX/Sja
./folder/TXX/Sja/file
./folder/TXX/Sjb
./folder/TXX/Sjb/file
./folder/TXX/Skb
./folder/TXX/Skb/file
./folder/TXY
./folder/TXY/SWU
./folder/TXY/SWU/file
./folder/Zab
./folder/Zab/ABC
./folder/Zab/ABC/file
./folder/zBC
./folder/zBC/ABC
./folder/zBC/ABC/file
./folder/zBC/ABC/target
./folder/zBC/target
./target1
./target2

다음 "시험 실행"을 수행하십시오.

$ rsync -Havn --exclude={/target*/,/folder/S[k-z]*/,/folder/[T-z]*/} * target1
sending incremental file list
folder/
folder/ABC/
folder/ABC/SWU/
folder/ABC/SWU/file
folder/ABC/SXY/
folder/ABC/SXY/file
folder/ABC/ZWE/
folder/ABC/ZWE/file
folder/AIB/
folder/AIB/SWU/
folder/AIB/SWU/file
folder/AIB/Sja/
folder/AIB/Sja/file
folder/AIB/Skb/
folder/AIB/Skb/file
folder/BCD/
folder/BCD/SWU/
folder/BCD/SWU/file
folder/CDE/
folder/CDE/SWU/
folder/CDE/SWU/file
folder/Sja/
folder/Sja/SWU/
folder/Sja/SWU/file
folder/Sja/Skb/
folder/Sja/Skb/file

sent 742 bytes  received 106 bytes  1,696.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

그리고

$ rsync -Havn --exclude={/target*/,/folder/[0-R]*/,/folder/S[0-j]*/} * target2
sending incremental file list
folder/
folder/Skb/
folder/Skb/SWU/
folder/Skb/SWU/file
folder/Skb/Sja/
folder/Skb/Sja/file
folder/TXX/
folder/TXX/Sja/
folder/TXX/Sja/file
folder/TXX/Sjb/
folder/TXX/Sjb/file
folder/TXX/Skb/
folder/TXX/Skb/file
folder/TXY/
folder/TXY/SWU/
folder/TXY/SWU/file
folder/Zab/
folder/Zab/ABC/
folder/Zab/ABC/file
folder/zBC/
folder/zBC/ABC/
folder/zBC/ABC/file
folder/zBC/ABC/target/
folder/zBC/target/

sent 713 bytes  received 100 bytes  1,626.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

관련 정보