티스토리 뷰



//////


■ 최악의 상황에서의 작업과 백업을 위한 매크로 작성

앞글에서 문서 작성 과정의 백업의 필요성과 어려움을 살폈다.

http://blog.paran.com/story007/47023263

그런데 여러 디스크를 원본으로 삼아 파일관리 작업을 할 때
다수 백업본과 원본 사이에서 동일화 작업에 어려움이 발생하는 최악의 상황을 막고,
되도록 간편하게 동일화 작업을 하기 위해서

각 디스크를 원본으로 삼아 작업을 할 때 작업 내용을 로그로 기록해서
다른 디스크에서도 동일한 작업을 실행시키는 방안을 생각할 수 있는데,
이번 새로 목록작업에서도 좀 필요한 부분이 있지 않나해서 이를 생각해 보게 된다.

■ 우선 앞에서도 간단히 살폈듯, 이런 방식의 원본(백업본)동일화 작업에는 전제 상황이 필요하다.


○ 백업본(원본)간에는 드라이브-내 폴더구조가 동일해야 한다.
○ 각 디스크 내에서 백업본(원본) 관리를 하는 부분에서의
파일 변경작업시에는 로그를 기록하는 핫키를 통해서 파일관리작업을 행한다.
○ 핫키는 해당 파일관리작업을 행하는 동시에 로그를 생성시키게 한다.


○ 기본적 파일관리 작업은 다음이다.


○ 파일(폴더) 이동 ["백업관리폴더" 내부에서 ]
○ 파일(폴더) 이름 변경

○ 파일(폴더) 삭제
○ "백업관리폴더"에서 -> 외부 폴더로 파일(폴더) 이동

○ 외부폴더에서 -> "백업관리 폴더" 내로 파일(폴더)이동
○ 새 파일 생성
○ 파일 내용 변경 - 저장


이들 내용이 기록되면 각 디스크에서 같은 구조의 폴더에 동일한 형태로 반복시키게 된다.
로그기록은 역순으로 실행시키면, 원상태로 되돌리는 역할도 부분적으로 하게 된다.

여하튼 디스크 단위 당, 해당 작업을 동일하게 행하게 된다.
( 원래는 디스크 대 다른 디스크 단위로도 이동이 가능하지만, 여기 백업 목적로그에서는 취급하지 않게 된다...^^)

로그 기록은, 그 작업을 다른 백업본(원본)에서 동일하게 일으킬만한 내용일 때 기록하는 것이 좋다.

작업과정 중의 사소한 변경까지 모두 기록하는 것은 번잡한 것이다.

백업목적의 로그에서는 문서 작성 과정 중의 타이핑 - 일부 삭제 - 복사 -- 이런 것까지 기록할 필요는 없는 것이다. (^^)

따라서, 임시로 작업 용으로 빈문서를 생성시키거나, 그렇게 생성시킨 빈문서를 삭제하거나, 하는 작업은,
작업 진행 과정 중의 임시적인 일로 보고, 이들 내용까지 일일히 로그를 기록할 필요는 없다.

빈문서를 생성한 상태에서 어느 단계에서 한 빈 문서의 실질 내용이 마무리 되었다고 할 단계에서,
이 때 이 문서에서 핫키를 눌러, 그 빈문서가 새 문서로 생성되었다고 -- 로그에 기록시키면 된다.

다른 파일관리작업도 유사한 성격을 갖는 경우, 일일히 로그를 기록할 필요가 없다.

엄밀하게 보면 작업 중인 디스크와 다른 원본(백업본)의 내용은 조금씩 다를 수 있게 된다.
그러나 이런 차이는 큰 의미차이가 없다.
빈 문서가 이 디스크에 있는 것과 없는 것 저쪽 디스크에는 빈문서가 많이 생성되어 있는 것 이런 차이는
서로 간에 큰 의미차이가 없다고 보는 것이다.


따라서 로그를 기록할 작업의 기본 체계를 위와 같은 형태로 구성하기로 한다.

한편 작업의 성격에 따라,
단순히 작업내용을 로그로만 기록하고 그 내용을 실행시키면 되는 경우가 있고,
그 작업결과물도 함께 보전해 놓는 것이 필요한 경우가 있다.

- 작업 내용만 기록하면 되는 경우는 다음이다. -

○ 파일(폴더) 이동 ["백업관리폴더" 내부에서 ]
○ 파일(폴더) 이름 변경
○ 파일(폴더) 삭제
○ "백업관리폴더"에서 -> 외부 폴더로 파일(폴더) 이동

- 그러나 작업내용 기록과 함께 그 결과물도 함께 필요한 경우가 있다. 다음이다.

○ 외부폴더에서 -> "백업관리 폴더" 내로 파일(폴더)이동
○ 새 파일 생성
○ 파일 내용 변경 - 저장


위 내용들은, 해당 파일들이 다른 디스크에서는 그에 해당한 파일들이 주로 없는 경우들이다.
그러므로 이 내용은 단순히 작업한 내용만 기록한다고
다른 디스크에서 같은 형태로 실행시켜 줄 방안이 없다.
그래서 이 경우는 해당 결과물을 별도 폴더에 넣어 관리해 줘야 한다.
로그기록을 통해 일치시켜 줄 때는
이들 파일들을 그 별도 폴더에서 복사해 일치작업과정에 이용하게 된다.

■ 로그기록의 방안

디스크 당 폴더와 파일관리가 되므로 일단 작업내용을 다음 형태로 기록한다.


[ 작업한 파일이나 폴더의 상대경로 ] | 작업내용 약호


작업 내용 약호는 정하기 나름이지만,
그 약호는 매크로 스크립트에서 이를 인식해 그 약호에 해당한 작업을 하게 되므로
스크립트에서 각 작업에 따라 기호를 배당해서 일관되게 사용하면 된다.

○ 작업내용을 기록하는 기호와 그 작업을 행한 폴더나 파일의 경로를 기록하는 부분의 구분자는 ?나 | 기호등이 사용가능하다.
? 나 | 이 파일명 폴더명 안에 넣을 수 없는 기호라는 사정 때문이다. 그런 기호에 * \ 도 있지만, 다른 경우에도 사용이 많이 되므로 (^^)


로그기록의 샘플은 다음이다.

\G\10\기록\0006.htm|\G\10\기록\0006_001.htm
\G\10\기록\0006_001.htm|q
\G\10\기록\0007_001.htm|c

이런 식으로 파일 관리 작업시 핫키를 통해
파일 관리작업을 행하면 그 결과가 로그에 순서대로 자동 기록된다.

이제 이 로그파일을 다른 디스크에서 기록된 순서로 읽어서,
해당 파일에 대해 옆에 붙여진 작업기호를 인식해
그 기호에 해당된 작업을 스크립트에서 하나하나
그 옆에 기록된 파일이나 폴더에 대해 실행해 나가면 된다.

여기서 앞에서 말한 것처럼,
해당 파일이나 폴더가 없는 경우, 이 기록만 가지고는 행할 수 없는 경우가 있다.

따라서, 그런 작업의 경우에는 일정한 폴더 [ 별도 백업폴더 ]에 해당 파일(폴더)가 있어야 한다.
그리고 그렇게 해당 파일이 필요한 작업에 해당하는 기호에 해당되는 경우는,
그 파일 보관폴더에서 해당 파일을 찾아서 해당 작업을 행하게 하면 된다.

- 전체 백업본(원본) 내용 가운데에서
변경이 이뤄지는 파일과 폴더들만 임시로 중복 복사해서
백업목적으로 관리하게 하는 것이다. -


■ 이런 로그를 통한 파일관리에서 조금 구별해야 할 작업은
파일 당 관리와 폴더 당 파일관리를 조금 구별해야 한다는 점이다.

간단히 보면 폴더당 관리를 하면
aaa 라는 폴더를 이동시키거나 삭제할 때
aaa 라는 폴더 안에 구체적으로 무슨 무슨 파일들이 있고 변화가 어떻게 이뤄졌더라도
그 상태로 전체를 이동시키거나 삭제하게 된다.


그러나 파일당 관리를 할 때는
aaa 라는 폴더에서 그 안에 들어 있는 구체적인 파일들 전부인 a, b, c 만 이동시키게 된다.

처음에는 폴더당 묶어 관리하는 것과 폴더안의 전체 파일을 파일로서 관리하는 것이 내용이 같을 수 있다.

그러나 상황이 변하다 보면,,,,,
반드시 그렇다고는 보기 힘들 수 있다.
이쪽 디스크 상황과 저쪽 디스크 상황이 서로 같지 않아서, 그런 문제가 발생할 수 있다.
이쪽 디스크에서는 aaa 라는 폴더에 a, b, c만 들어 있었다.
그러나 저쪽 디스크에서는 aaa 라는 폴더에 a, b, c와 d가 들어 있다. [ 추가 작업을 거기서 했나보죵... ]

이 경우 폴더로 묶어 관리한 것과
폴더내 파일 전체를 파일로써 관리한 것은
다른 디스크의 다른 상황 D 때문에 발생하는 것이다.

결국 이런 경우의 d를 어떻게 처리하는 것이 좋은가~를 염두에 두고
관리를 할 필요가 있다. [ 아주 드문 예이지만,,,,,]

공통 폴더를 놓고 다수가 관리 이용하는 경우에는 그러나 자주 발생할 수도 있다.

그래서 사용자는 자신이 삭제나 이동 작업을 할 때,
이것을 폴더당 묶어서 포괄적으로 폴더로 관리하고자 한 것인지,
아니면 그 폴더안의 개별 파일들만 전부 관리하고자 한 것인지에 대해 약간의 주의가 필요하다.

여러 작업 상황에서는
이 관리상 개념 차이로 인해 결과에 약간의 차이가 발생할 수 있기 때문이다.


■ 기록 내용에서도 파일에 대한 작업기록인지, 폴더에 대한 작업기록인지 파악할 길이 필요하다.

우선 폴더의 경우는 끝에 \ 기호를 붙여서 구별하면 된다.
| 앞부분에 \ 기호가 없는 것은 무조건 파일로 간주하면 된다.

이동이나 이름변경은 | 앞 뒤에 해당 파일들의 기록이 모두 나타나게 된다.
이 경우는 별도의 인식기호가 필요없고 | 다음에 \ 기호로 시작하는 것이
이동이나 이름변경 작업 기록이라고 보면 된다.


■ 로그기록을 통한 원상회복 작업

작업순대로 작업 내용이 로그에 기록되면
원칙적으로 이 로그기록을 역순으로 읽어서
각 작업 내용의 역방향의 작업을 배당해 실행시키면,
부분적으로 원상복구가 가능하다.

-- 원상회복시 순서가 역순으로 진행하지 않으면
엉뚱하게 복구가 이뤄질 수 있다.

a를 b로 이름변경하고
그 후 다시 b를 c로 변경했는데
이것을 원래로 돌리려면,
거꾸로 작업을 해야 한다.
로그에 기록된 순서와 역순으로 하고
작업도 거꾸로 해야 함을 의미한다.

c를 b로 그리고 b를 a로 바꿔야 한다.

- 그런데 이런 원상회복이 가능한 것은,
일부작업에서다.

파일삭제한 경우
파일을 관리폴더 외부로 이동시킨 경우,
파일 안의 내용을 1에서 2 그리고 2에서 3으로 변경시킨 경우 등은,
원상회복을 시킬 방안이 별로 없다.

해당된 파일을 별도로 다른 곳에 모두 저장해 놓고 있지 않는한,
삭제시킨 파일, 외부로 이동시켜서 ( 그 이후 ) 없어진 파일, -- 또는 다른 디스크에서는 단순 삭제 처리해버린 파일
- 덮어 씌어서 사라진 이전 파일 들

이런 경우는 역작업을 진행한다고 되살려 내기는 곤란하다.

새파일 생성, 새내용 저장을 모두 동일하게 처리하면
역으로 원상회복시 이들 파일은 삭제처리하면 된다.
그런데, 새 내용 저장의 경우는 삭제가 될 뿐~ 이전 파일이 복구가 되는 것은 아니다.

결국, 원상회복이 실효가 있는 것은 관리폴더내 이동이나 이름변경 정도라고 봐야 한다.

만일 삭제한 파일들도 유사시, 휴지통에서 재 회복하기를 원한다면,
삭제시 휴지통 삭제를 통해 삭제를 해서 원상회복하면 된다.

또는 매크로로 해결하려면, 그런 경우의 삭제는 단순히 삭제폴더로 이동시켜서 삭제처리한 것으로 하면 된다.
이 경우는 원상회복을 시키면 그 이동시킨 폴더에서 다시 원 위치로 이동시켜 주면 되기 때문이다.

■ 자신의 작업에서 이런 것이 필요하다면
삭제 방법을 조금 다양하게 만들어 핫키를 배당하면 된다.

이동삭제
휴지통 삭제 (일반 작업시 del 키)
-------
완전삭제 (shifr + Del 키)
그리고 이런 삭제외에도 보안필요로 복구가 어렵게 삭제하는 wipe 방법도 넣어도 된다.

자신이 원하는 형태로 핫키를 배당해 사용하면 된다.
앞의 두 경우는 때로는 원상회복이 가능하고
뒤는 불가능한 경우다..
뒤 작업을 역순으로 시키면 무시하고 다음 줄로 넘어가게 하면 된다.
조금 안타까우면 메세지로 이렇게 된 사정을 기록해서 나중에 출력해 줘도 된다.

--------

■ 한편 단순 새 파일 생성과 - 기존 파일 변경의 경우가
조금 차이가 있으므로, 이를 별도로 달리 관리해줘도 된다.

기호를 조금 달리하고,
기존 파일 변경의 경우에 배당된 기호에서는
-> 다른 디스크에서, 그 파일을 일단 이동삭제시키고,
그리고 나서 복사하게 해도 된다.
이렇게 하면, 만일에 경우에 삭제된 파일을 보관하는 곳에서 찾아서 복구할 수는 있다.
다만 이렇게 하면 스크립트 작성이 매우 복잡해 질 가능성이 있다.

--------

■ 추가로, 일정한 압축 프로그램을 통해 압축하거나, 해제하는 것등도 지원이 가능하다.

■ 압축해제시의 문제점.

만일 관리폴더 외부의 압축파일을 관리폴더 안에 해제시켜 파일을 생성해 넣었다고 가정하자.

이런 경우, 압축을 해제하기 전에 그 압축파일안에 들어 있는 파일과 폴더 구조를 알지 못하면,
이 내용을 로그기록에 그대로 반영해주는 것이 곤란해진다.

그래서 미리 압축파일 안의 파일과 폴더 구조를 List 로 출력해 로그로 기록해 놓고,
압축해제를 실행하고,
다시 그 결과파일들을 새파일 생성 결과물로 반영시켜줘야 한다.

조금 로그 관리와 매크로 스크립트 작성이 복잡해지는 이유다.

압축파일에 따라서 리스트 출력이 가능한 경우도 많지만,
사용한 압축프로그램이나, 암호 여부 등에 따라서, 모든 경우를 다 지원하는 매크로를 작성하기는 곤란하다.

결국, 매크로 스크립트가 모든 압축프로그램과 다양한 각 옵션을
모두 지원하게 만드는 것은 매우 복잡하고 어려운 문제이다.
따라서 이런 압축 해제는 조금 제한된 형태로 사용하고 관리해야 한다.

다만, 압축된 파일을 관리폴더내에 넣기를 원할 때는
임시 폴더에 일단 압축을 풀고,
그 상태에서 외부폴더에서 그 파일이나 폴더들이 이동한 것으로 처리하면,
결과는 같지만, 조금 로그 관리가 쉽다.
압축을 해제한 결과가, 일단 쉽게 파악이 된 상태에서 로그 기록을 행할 수 있기 때문이다.

다만 압축 해제 작업시 그 작업 내용을 기록할 별도의 방안이 마련된다면,
이 문제는 그 방안을 통해 쉽게 해결이 될 수도 있을 것이다.



압축의 경우도 좀 사정이 복잡하다.

압축할 때 압축시키는 기존 파일들이 그대로 잔존하는 경우도 있고,
압축파일안으로 이동되어 삭제되는 경우도 있다.

이 역시 매크로 스크립트에서 이를 구분해 일일히 따로 기록하거나,
각 작업에 핫키를 미리 배당시키기가 곤란한 성격을 갖는다.

이론상 완전히 불가능한 것은 아니지만,
로그 기록이 복잡해지고,
스크립트도 좀 더 복잡해지게 된다.

단순히 압축을 한 파일의 삭제처리 +
압축되어 나타난 결과물의 생성,,
이 정도로만 단순하게 결과가 나온다면
그런 경우 로그기록은 쉽게 이뤄질 수 있다.

문제는 압축프로그램을 실행할 때, 그렇게 제한적으로만 사용해야 된다는 의미도 된다.

만일 표준 방식이 아닌 경우는 별도로 자신이 관리를 해주면 된다.
즉, 압축을 자유로 하고 그렇게 생성한 내용을
개별적으로 로그 기록에 넣으면 된다.


■ 이상의 작업은 토털커맨더에서 파일관리를 하면,
작업하는 각 폴더나 파일 내용을 쉽게
로그에 기록시킬 수 있다.

토털커맨더에서, 파일관리하고자 블록선택한 부분들의
절대경로 내용을 클립보드로 복사하는 옵션을 지원하기 때문이다.


■ editplus 에서 작업 파일 목록을 기재해 작업하는 방안을
일전에 제시했는데,
이 경우는 개별 파일당 파일 관리를 하는 것이고
모든 핫키 내용이 로그가 필요한 작업은 아니다.
각 핫키 가운데 로그 기록이 필요한 몇몇 기능 [ 즉 이동, 이름변경, 압축, 삭제..]
이런 것들에만 로그를 생성시키는 스크립트를 추가하면 된다.

■ 그래서 토탈커맨더에서 파일관리하는 내용과
editplus 목록 파일에서 파일관리하는 내용이
순서로 통합 기록되게 하면,
그 순서대로 다른 디스크에서도 작업을 실행하면 된다.

■ 이상이, 로그 기록과 매크로 스크립트를 통한, 다수 원본(백업본)의 동일화 방안에 대한
개요다.

댓글