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

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

원래 경로, 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.

  • 모든 FolderA/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="/*/*/" : FolderA/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

관련 정보