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