![날짜별 파일 재동기화](https://linux55.com/image/203279/%EB%82%A0%EC%A7%9C%EB%B3%84%20%ED%8C%8C%EC%9D%BC%20%EC%9E%AC%EB%8F%99%EA%B8%B0%ED%99%94.png)
다음과 같은 파일 구조가 있습니다.
...folders/to/copy
...folders/to/mirror
나는 해왔다:
rsync --ignore-existing -raz --progress $source $destination
이는 두 폴더 트리의 모든 내용을 최신 상태로 유지하는 데 유용합니다. 하지만 이제는 24시간 전에 변경된 파일에 대해서만 이 작업을 수행하면 됩니다. 나는 다음과 같은 것을 시도했습니다 :
rsync -rav `find $source -mtime 1` $destination
문제는 이것이 파일 트리를 엉망으로 만들고 필요한 방식으로 작동하지 않는다는 것입니다. 더 좋은 방법이 있나요?
"폴더"와 그 안의 모든 항목에 대한 상대 경로를 사용하여 한 위치에서 다른 위치로 파일 구조를 백업하고 24시간이 지난 파일만 남겨 두고 싶습니다( mtime
).
답변1
이를 사용하여 find | rsync
아래와 같이 복사하려는 파일을 필터링 할 수 있습니다.
src=/source/folders/to/./copy
dst=/destination/mirrored/folders
find "$src/" -type f -mtime +0 -print0 |
rsync --dry-run -a -iv --files-from - --from0 / "$dst"
--dry-run
일련의 결과에 만족하면 삭제하십시오. -iv
보다 조용한 작동을 원하시면 제거하세요.
/./
소스 경로의 일부는 파일 경로가 보존되어야 하는 지점을 정의한다는 점을 지적해야 합니다 . 예를 들어 경로가 있는 경우 /source/folders/to/./copy/sub/here.txt
해당 대상은 가 됩니다 /destination/mirrored/folders/copy/sub/here.txt
. 자세한 내용은 --files-from
및 --relative
( -R
) 옵션에 대한 설명서를 참조하세요 . man rsync
소스 경로가 상대적인 경우에도 괜찮습니다.
이 솔루션은 find
GNU 또는 기타 에서 사용할 수 있습니다 . 해당 옵션 이 -print0
없으면 제거할 수도 --from0
있지만 . 다음 토론을 참조하세요.-print0
-exec printf '%s\0' {} +
GNU find의 -print0에 대한 POSIX 대체.