특정 하위 폴더와 파일을 새 디렉터리에 복사하는 재동기화

특정 하위 폴더와 파일을 새 디렉터리에 복사하는 재동기화

원래 경로, RootFolderI:

RootFolderI/FolderA/Subfolder1/Subsub1/JPG1.jpg -> want this jpg
RootFolderI/FolderA/Subfolder2/Subsub1/JPG2.jpg -> want this jpg
RootFolderI/FolderA/Subfolder2/Subsub2/JPG3.jpg
. . .
RootFolderI/FolderB/Subfolder1/Subsub1/JPG4.jpg -> want this jpg
RootFolderI/FolderB/Subfolder2/Subsub1/JPG5.jpg -> want this jpg
RootFolderI/FolderB/Subfolder3/Subsub2/JPG6.jpg
...

FolderA/B/C/etc 폴더가 많지만 그 안의 폴더 구조는 항상 동일합니다(파일이 다른 것을 제외하고).


다음으로 복사하고 싶습니다 RootFolderII.

  • 모든 폴더 A/B/etc만.
  • Subsub1의 모든 파일

...결과는 다음과 같은 새로운 경로인 RootFolderII입니다.

RootFolderII/FolderA/ with JPG1.jpg, JPG2.jpg
RootFolderII/FolderB/ with JPG4.jpg,JPG5.jpg

현재 다음 코드가 있습니다(그러나 작동하지 않습니다).

rsync -r --include='Folder*/Subfolder1/Subsub1/***' --exclude="/*/*/" /RootFolderI/ /RootFolderII/

어디

--exclude="/*/*/" : A/B/폴더 생성... -> 작업

--include='Folder*/Subfolder1/Subsub1/***' : 구조가 아닌 모든 파일을 복사하고 싶습니다... -> 작동하지 않습니다

???글쎄, 작동하더라도 FolderB에서 FolderA로 파일을 복사할 것이라고 생각하는데 나는 그것을 원하지 않습니다!

답변1

시도 해봐.

rsync -r --include='*.jpg' --exclude="*" /RootFolderI/Folder*/Subfolder1/Subsub1/. /RootFolderII/.

답변2

내가 뭘 한거지:

  • rsync포함 및 제외

  • 파일을 위로 이동(2레벨 위로)

    find /folder/ -type f -mindepth 3 -execdir mv -t ../../ -- {} +
    
  • 빈 폴더 삭제

    find /folder/*/ -type d -empty -delete
    

답변3

rsync나는 이 일 에 쓸모가 없을 것 같아요 . (증분 알고리즘이 없으므로 이를 사용하여 얻을 수 있는 이점이 거의 없습니다.) 사용된 버전은 다음과 같습니다 cp.

for rfipath in RootFolderI/*
do
    folder="${rfipath/*\/}"
    mkdir -p "RootFolderII/$folder"
    cp -p "$rfipath"/*/Subsub1/* "RootFolderII/$folder"
done

산출

RootFolderII/FolderA/JPG1.jpg
RootFolderII/FolderA/JPG2.jpg
RootFolderII/FolderB/JPG4.jpg
RootFolderII/FolderB/JPG5.jpg

rsync정말로 사용 하고 싶다면 cp해당 줄을 이것으로 바꾸세요. 디렉토리 수정 시간을 알려줍니다.

for folder in RootFolderI/*
do
    rsync -a "$folder"/*/Subsub1/ "RootFolderII/${folder/*\/}"
done

관련 정보