file system merge script

File system merge 기능은 생각보다 매우 요긴하다.

이게 무슨 기능이냐고? 그러니까 예를 들어서 백업이 되어있는 폴더 A와 상시 업데이트를 하고 있는 폴더 B가 있다고 할 때, 폴더 B를 백업한 직후에는 폴더 A와 B의 내용물은 완전히 같게 되지만, 시간이 갈 수록 내용물이 달라지게 된다.

그래도 백업을 하는 폴더 A는 비록 폴더 B의 내용의 일부가 삭제되더라도 반영할 필요가 없지만 대신 새로운 내용이 추가되면 그것은 언젠가는 반영해서 백업해야할 필요가 있으니까 우리는 이 기능을 파일 시스템 merge라고 부른다.

일부의 OS에서는 단순히 GUI 상에서 copy/paste를 하더라도 이런 기능을 제공하긴 하지만 어떤 것들은 안되고 어떤 것들은 디폴트로 기존 것을 지우고 새로운 것을 쓰게 하는 등 불편하게 할 때가 있다.

이를 위해서는 사실상 platform indepedent한 script가 있으면 편리하다. 나는 그 중에서도 perl을 선호한다. python이 대세라지만 perl로 만들면 매우 간단해지기 때문이다. 실행속도는 그렇게 빠르지 않아도 상관없다. 대부분의 수행시간은 네트웍이나 파일 시스템 액세스를 하느라 다 소비되기 때문이다. 그리고 이 스크립트가 없을 때는 맹점이 많은 수동작업을 해야되기 때문에 전혀 효율적이지 못하다.

나는 이 스크립트를 주기적인 정보/보관 파일들/촬영해 놓은 사진들을 업데이트할 때도 쓰고 이미 구축해놓은 음악 데이터베이스를 갱신/백업할 때도 쓴다. 정말 매우 요긴하다. 여기에 추가로 사진을 관리할 때는 그 파일의 종류가 뭐든 이름이 뭐든 파일이 생성된 시점을 토대로 일별로 폴더를 만들어서 자동 정리하는 스크립트를 추가로 만들어서 쓴다. 역시나 매우 요긴하다. 비록 아쉽지만 일지 대용으로 사용할 수 있어서 더 좋다. 어떤 날에 무슨 일이 있었는지 날짜별로 폴더만 찍어보면 되니까 말이다.

수행 내용은 사실 별 게 없다. recursively folder를 scan해서 target 대비 새로운 것인지 아닌지만 판단해서 곧바로 복사하게 하면 된다. 내용이 좀 다르면 원본의 것을 복사하도록 하게 하게 했는데 날짜를 체크해서 최근 것으로 취하는 방법도 있을 것이다. 매우 간단해 보이지만 그 요긴함과 신통방통함은 이루 말할 수 없다.

이 일을 시켜놓고 다른 일을 해도 되기 때문에 매우 편리한데 수동을 일을 하는 것, 그것으로 받는 스트레스, 또 실수해서 데이터를 overwrite한다거나 날려먹는 것, 또 그로 인한 스트레스까지 모두 고려하면 짧은 시간을 들여 작성하는 스크립트 치고는 이렇게 신통방통한 게 없다.