파일 시스템을 통한 대략적인 원자 이동?


16

우분투에서 한 파일 시스템에서 다른 파일 시스템으로 일부 파일을 이동해야합니다. 그러나 파일이 최소한 올바른 파일 이름 아래가 아닌 대상에 부분 또는 불완전한 파일로 존재하지 않는 것이 매우 중요합니다.

지금까지 유일한 해결책은 각 파일을 가져 와서 대상의 임시 이름으로 복사 한 다음 대상의 파일 이름을 원래의 파일 이름으로 변경하고 원래 파일을 삭제하는 스크립트를 작성하는 것입니다. .

그러나 스크립트를 작성하고 디버깅하는 것은이 작업에 무리가있는 것 같습니다. 이미 이것을 기본적으로 수행하는 방법이나 도구가 있습니까?


8
나는 xy 문제를 느낀다. 왜 이것이 필요한가요?
henning-복직 모니카

3
@henning 가능한 이유가 많이 있으므로 좋은 질문입니다. 예를 들어, 특정 정규식과 일치하는 파일 이름을 가진 파일을 자동으로 처리하려고하는 프로그램이지만 관료적 인 이유로 일시적으로 비활성화 할 수는 없습니다. 또는 파일을 가져 와서 내구성이 있지만 쓰기 전용 미디어에 저장하는 백업 시스템 일 수 있습니다.
wizzwizz4

1
@henning 여러 저장소에서 읽은 많은 캐시가 있지만 용량이 거의 다되어 서비스에서 제거해야하기 때문에 필요합니다. 따라서 각 위치에 파일이 있으면 각 파일이 완전하고 완전해야합니다. 그렇지 않으면, 캐시가 불완전한 파일을 가져 와서 보유 할 수있는 전송 시작과 종료 사이에 경쟁 조건이 존재합니다.
Niels2000

답변:


27

rsync옵션 을 사용하지 않는 한 임시 파일 이름으로 복사합니다 (예 : Rsync 임시 파일 확장자rsync-전송 중에 임시 파일을 작성합니까? 참조 ) --inplace. 파일이 성공적으로 전송 된 후에 만 ​​이름이 바뀝니다. rsync또한 디스크가 가득 찼거나 다른 오류로 인해 부분적으로 만 전송 된 대상 파일도 삭제합니다.

--remove-source-files소스 파일이 성공적으로 전송 된 후 삭제 하는 옵션 도 있습니다 . 자세한 내용은 rsync매뉴얼 페이지를 참조하십시오.

이 모든 것을 종합하면 다음과 같은 것을 사용할 수 있습니다.

rsync -ax --remove-source-files source/ target/

이 옵션은 특히 "들어오는"대기열에서 파일을 옮기거나 처리 될 디렉토리와 유사한 작업에 유용합니다.

또는 이것이 일회성 미러 인 rsync경우 --remove-source-files옵션 없이 사용할 수 있습니다. 원하는 경우 나중에 소스 파일을 삭제할 수 있습니다.


나는 그 일을위한 좋은 도구가있을 것이라고 생각했다. 감사!
Niels2000

@ Niels2000 이전에 rsync 옵션을 사용한 적이 있었지만 기억할 수는 없지만 rsync할 수있는 일처럼 들리며 임시 이름으로 파일을 전송한다는 것을 알았습니다 (사용하지 않는 한 --inplace). 에서 man rsync찾았습니다 --remove-source-files. rsync거의 모든 파일 전송 작업을 먼저 확인하는 좋은 도구입니다.
cas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.