cp AND rsync는 모든 하위 디렉터리에서 모든 유형의 모든 파일을 제외하고 디렉터리만 유지합니다.

cp AND rsync는 모든 하위 디렉터리에서 모든 유형의 모든 파일을 제외하고 디렉터리만 유지합니다.

사용하면 find . -type d검색에서 상위 디렉터리나 하위 폴더에 있는 모든 파일을 제외합니다. 모든 폴더와 하위 폴더의 파일을 제외하고 폴더만 복사되도록 -exec cp -p확장 하고 싶습니다 . rsync "{}" destination \;.pdf 또는 .jpg와 같은 확장자로 제외하는 방법만 알고 있는데 파일이 여러 개이고 디렉터리가 수백 개라면 어떻게 될까요? 이 문제를 어떻게 처리해야 합니까?

감사해요

답변1

find+ mkdir+ touch댓글에서 언급했듯이 작동합니다

find . -type d -exec sh -c 'dir="{}"; mkdir -p "destination/$dir" && touch -cr "$dir" "destination/$dir"' \;

언급된 Ipor 명령은 touch -r <olddir> <newdir>olddir에서 수정 시간을 가져오고(olddir을 변경하지 않고) newdir에 동일한 시간을 설정합니다. 추가하면 -c실수로 새 파일이 생성되지 않도록 보장됩니다.find가 상대 경로를 인쇄할 것으로 예상하므로 소스 디렉터리에서 실행해야 합니다.각 디렉토리에 대해 쉘을 생성하므로 약간 느려지므로 아래 대안을 선호할 수 있습니다.


선택하다:

cp --attributes-only -pr ./ destination && find destination -type f -empty -delete

모든 파일과 디렉토리를 재귀적으로 "복사" 하여 cp타임스탬프는 보존하지만 내용은 보존하지 않습니다. 그래서 빠릅니다. 파일 생성을 건너뛰는 것만큼 빠르지는 않지만 빠릅니다. 그런 다음 find빈 파일을 삭제하고 디렉터리 구조를 그대로 둡니다.

관련 정보