
소유권, 권한 등의 변경을 포함하여 특정 날짜 이후에 파일을 변경하지만 백업에서 단순히 복원된 파일은 제외하려면 어떤 tar 명령을 사용해야 합니까?
반면, 복원 후 모든 파일을 살펴보고 복원의 일부로 각 파일의 상태 변경 시간을 변경하는 것이 바람직합니까?
나는 주기적인 가난한 사람의 백업을 위해 특정 날짜 이후 최근에 수정된 모든 파일을 tar로 지정하기 위해 다음과 유사한 명령을 사용해 왔습니다.
$ SINCE=20190501
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf -
이것은 실제 명령은 아니지만 제가 말하려는 요점을 보여줍니다. 이 명령은 출력을 tar 파일로 보내는 경우 tar 파일에 들어가야 하는 파일 목록을 덤프합니다.
지금까지는 하드 드라이브를 교체하고 백업에서 모든 파일을 복원할 때까지 이 명령이 제대로 작동한다고 생각했습니다. 의 출력을 보면 stat
변경 날짜가 백업에서 모든 파일을 복원한 날짜인 것으로 나타나므로 이제 위의 tar 명령에서 모든 파일이 선택됩니다.
$ stat restore_file.txt
...
Modify: 2019-04-01 23:52:12.000000000 -0500
Change: 2019-05-25 01:52:10.737688040 -0500
심지어 --newer-mtime
도움이 되지 않는 것 같습니다.
$ tar cf - --newer-mtime="${SINCE}" . | tar tvf -
업데이트:다음도 시도했지만 여전히 원하는 것보다 더 많은 파일을 선택했기 때문에 아무 도움이 되지 않는 것 같습니다.
$ SINCE=201905010000
$ touch -t "${SINCE}" /tmp/timestamp
$ stat /tmp/timestamp
Access: 2019-05-01 00:00:00.000000000 -0500
Modify: 2019-05-01 00:00:00.000000000 -0500
Change: 2019-06-30 18:29:19.277267874 -0500
$ tar cf - --after-date /tmp/timestamp . | tar tvf -
답변1
디렉터리를 필터링하여 다음을 수행합니다.
$ tar cf - --after-date="${SINCE} 00:00:00" . | tar tvf - | grep -v '^d'
내가 잡고 싶었던 파일이 실제로 잡히고 있다는 것을 알았습니다.
어떤 이유에서인지 tar는 타임스탬프에 관계없이 모든 디렉터리를 가져오지만 그걸로 괜찮을 것 같습니다. 따라서 위의 명령은 대부분의 경우 여전히 괜찮으며 백업을 복원할 때까지 아무 문제도 발견하지 못했습니다.
이제 복원과 관련하여 복원된 각 파일에 변경 속성이 설정된다고 언급했습니다. 따라서 --after-date
다음 백업에서 모든 파일을 가져왔기 때문에 쓸모가 없었습니다.
이 문제를 해결하기 위해 복원 이후 처음으로 다음을 사용하여 전환했습니다 --newer-mtime
.
$ tar cf - --newer-mtime="${SINCE} 00:00:00" . | tar tvf -
이를 통해 복원 이후 새 파일을 모두 얻을 수 있게 되었고, --after-date
다음 백업부터 다시 원본을 사용할 계획입니다.
여기에는 아래에 자세히 설명된 한 가지 단점이 있습니다. 파일을 복원한 시점과 첫 번째 백업 사이에 권한이나 소유권이 변경된 경우 해당 파일을 선택하지 않으며 동일한 파일에 권한/소유권이 변경되지 않는 한 절대 선택하지 않을 것입니다. 그러면 해당 시점의 업데이트만 받게 되며 해당 시점까지의 모든 백업은 잘못된 권한/소유권으로 복원됩니다.
그만큼GNU tar 매뉴얼다음과 같이 말합니다.
파일 내용이 수정되거나 소유자, 권한 등이 변경된 경우 파일 상태가 변경된 것으로 간주됩니다.
"등등"이 무엇을 의미하는지 명확하지 않지만 그 내용도 놓치고 있습니다.
여기서 백업하는 내용을 고려하면 이에 대해 걱정하지 않으므로 이번에는 괜찮습니다. 그러나 마음에 드는 경우에는 증분 백업을 버리고 완전히 새로운 전체 백업으로 처음부터 시작할 수도 있고, --newer-mtime
복원 직후에 위의 단계에 따라 하나의 증분 백업으로 복원 프로세스를 마무리할 수도 있습니다. . 후자는 사람들이 복원된 파일을 사용하기 전에 발생하므로 --after-date
.