티스토리 뷰


hardlink-autohotkey-script_v4.zip









● 중복폴더 중복파일 생성하기[심볼링크,하드링크 생성]


○ 필요성 


하나의 폴더나 파일을 여러 곳에서 사용해야 하는 경우가 있다. 

이런 때 그 폴더나 파일을 복사하면 같은 용량의 폴더나 파일이 중복생성된다. 

그런데 이렇게 되면 디스크 용량을 낭비하는 결과가 된다. 

그래서 전체 디스크 용량은 키우지 않고 

단지 폴더나 파일만 여러 개 복사해 사용하고 싶은 때가 있다. 


예를들어 다음과 같은 경우다. 


원래 이런 문제제기는 lab님으로부터 비롯되었다. 

lab 님이 어느날 사진을 찍었는데 이 사진에 등장하는 사람이 10 명 정도 된다고 하자. 

그런데 각 사람별로 어떤 사진에는 등장하고 등장하지 않고 해서 

그날 찍은 사진을 사람별로 나누어 중복 저장한다고 가정해보자. 


그러면 원래의 사진폴더에 들어 있는 어떤 사진은 

A라는 사람의 폴더에도 넣어 줘야 하고 

B라는 (사람)의 폴더에도 넣어줘야 한다. 


어떤 사진은 10개의 폴더에 중복 저장해야 하고 

어떤 사진은 7 개의 폴더에 중복 저장해야 할 경우도 있다. 


만일 그 파일이나 폴더의 용량이 적을 때는 별 문제가 되지 않는다.

그러나 사진을 보관하는 용량이 증가해가면, 

같은 파일을 여러 곳에 중복해 넣어 보관해갈 수록 

디스크 용량이 쉽게 부족해지는 경우가 발생한다. 


이런 경우 단지 링크만 걸어서 

하나의 파일을 여러 곳에서 사용할 수 있게 하면 편하다. 




● 원칙적 방법-1


'NTFS 디스크 시스템'에서

'window 7 등'에서는  

mklink 란 명령어로 이를 해결할 수 있다. 


이에 관한 자세한 방법에 대한 설명은 

캐플님의 심볼링크 하드링크에 관한 설명글 

http://cappleblog.co.kr/539 을 참조하기 바란다. 


링크를 생성하는 것은 윈도우 비스타 이후 내장된 mklink 명령을 통해 작업할 수 있다. 

기본적인 mklink 명령의 구조는 아래와 같다. 


1. 파일 심볼 링크 : mklink "링크" "원본"

2. 파일 하드 링크 : mklink /h "링크" "원본"

3. 폴더 심볼 링크 : mklink /d "링크" "원본"

4. 폴더 정션 링크 : mklink /j "링크" "원본"


링크는 생성할 사본을, 

원본은 생성된 링크가 가르킬 파일/폴더를 의미한다. [링크 <=> 원본]



한편, XP 에서는 

FSutil

또는 

junction.exe 라는 프로그램으로 이 문제를 해결할 수 있다. 


이 경우 

fsutil hardlink create   "링크"  "원본"

junction.exe  "링크"  "원본"

의 명령어로 실행하면 된다. 


참고로 junction.exe 프로그램은 다운받아야 한다. ( 아래 첨부파일 참조) 


다만 이들 방법은 해당 폴더나 파일의 이름을 일일히 하나하나 

개별적으로 입력해 도스 명령어를 통해 해결해야 하므로 조금 복잡하다. 







=> 토털커맨더를 사용한다면 다음의 방법이 조금 편할 수 있다. 



● 방법-2  [ 토탈커맨더에서의 방법 -1]


토털커맨더에서 위와 같은 복사를 하고자 할 경우 


창을 두개 열어 놓고 

핫키 CTRL + F5  F6 키나 F7 키를 누르면 

곧바로 위 mklink나 fsutil 명령 등이 실행되도록 

autohotkey 스크립트를 만들어 봤다. 



* 참고로 이 스크립트에는 robocopy 명령어 스크립트도 포함되어 있다. ( => robocopy 는 별도 참조 ) 





- 다만 autohotkey 와 토털커맨더를 같이 사용하는 사용자에게 편한 방법이라고 할 수 있다. - 

참고로 이 스크립트에는 
xp 사용자를 위해서 junction.exe 프로그램도 포함시켰다. 

다만, xp 시스템에서 테스트해본 결과 잘 되지는 않는 듯 하다. (^^)
스크립트 내용을 보고 응용해 사용해주기 바란다. 

[ 스크립트는 첨부파일 참조 ] 


○ 간단한 사용방법

autohotkey 스크립트 기본적 사용법 

autohotkey는 www.autohotkey.com 에서 다운로드 받으면 됨 

이후 

autohotkey.exe [본 스크립트 파일 경로] 로 스크립트를 실행함 

또는 autohotkey 설치후 압축파일에 들어 있는 txt 확장자로 된 스크립트 파일의 확장자를 ahk로 수정한 다음 클릭해 실행해도 됨 

또는 본 스크립트를 exe 파일로 컴파일하여 실행해도 됨 


 - 이와 같이 스크립트를 실행한 다음 - 

; Ctrl 키 + F5 을 누르면  => 원칙적으로 다른 드라이브간 해당 파일 또는 폴더의 (절대경로로)  심볼링크가 생성됨.  //  드라이브 명이 달라지면 연결 안됨 (포터블 환경 주의) 

; Ctrl 키 + F6 을 누르면  => 원칙적으로 같은 드라이브간 해당 파일에 대해서      (상대경로로)  심볼링크, 폴더에 대해서는 (상대경로의) 심볼링크가 생성됨.  

; Ctrl 키 + F7 을 누르면  => 원칙적으로 같은 드라이브간 해당 파일에 대해서      (상대경로로)  하드링크, 폴더에 대해서는 (상대경로의) 심볼링크가 생성됨.  

; xp 를 지원하고자 노력했으나 xp에서는 실행이 되지 않는 듯함 


; 이 스크립트는 문서작성용 스크립트에 포함됨 

; ● 본 스크립트 내용이 추가 오류가 발견되거나 개선사항이 혹시 있는 경우 수정본은 다음 페이지에 올리도록 합니다. 

; 다만, 각 스크립트 내용은 사용자가  개별적으로 편집사용하셔야 하며 비록 약간의 오류가 있다고 해도 차후 업데이트는 없다고 보심이 옳은 듯 합니다.(^^)

; [업그레이드용]- 매크로 수시 업그레이드 부분은 http://story007.tistory.com/89 

[ 토털커맨더를 사용시 본 스크립트를 버튼바에 등록한 다음 실행하면 좀 더 편할 수 있다. ]









■  중복폴더 중복파일 생성하는 또 다른 방법 [심볼링크,하드링크를 이용하지 않는 다른 방법 ]


● 또 다른 방법 1 -[ 토탈커맨더에서의 방법 -] 


우선 temporary panel 을 받아 토털커맨더에서 설치한다.  

http://www.totalcmd.net/plugring/temporarypanel.html



토탈커맨더를 사용하는 경우에 한해 위 프로그램을 

플러그인으로 설치해서 사용가능하게 된다. 


위 프로그램을 토털커맨더에 플러그인으로 설치하고 

그 다음 드라이브명이 나열되는 버튼바에서 

네트워크 버튼을 누르면 

가상 폴더 드라이브가 나타난다. 


여기에서 원하는 가상 폴더를 만들어 

파일들을 복사해 넣으면 된다. 


이렇게 하면 

그 파일이 직접 복사되는 것이 아니라, 

해당 파일의 정보만 복사 관리되고 

마치 진짜 파일인 것처럼 파일관리를 하게 된다. 


이 때 그 파일들 정보는 

위 프로그램이 들어 있는 폴더 안의 TempPanel.tpl

파일안에 저장된다. 

따라서 나중에 이 파일만 따로 관리할 수도 있다. 



● 또 다른 방법 2 


만일 토탈커맨더를 사용하지 않아서 익숙하지 않는 경우에는 

별도의 가상 폴더 프로그램을 

이용해도 된다. 


=> virtual folder 란 프로그램 참조

다만 이는 데모 프로그램만 제공하므로 

별도로 테스트해보지 않음. 



=> 참고로 이 스크립트는 http://story007.tistory.com/89 의 문서작업용 스크립트 안에 포함시켜 넣을 예정입니다. 

관련글: □http://essay007.tistory.com/836#comment11937101







● 하드링크와 심볼 링크 사용시 주의점

하드링크(파일의경우)와 심볼 링크는 폴더와 파일간에
특성이 약간 다르다.

사용편의를 위해 좀 정리를 해두어야 할 필요를 느낀다.

이렇게 되는 원리는 심볼링크는 단순한 링크라고 이해하면 이해가 쉽다고 본다.
하드링크는 디스크 파일 섹터 자체를 직접 연결하는 두개의 파일정보들이어서
생성후에는 서로 독립적인 관계가 된다고 이해하는 것이 좋을 듯하다.

즉 하드링크 생성 후에는, 파일 내용 변경을 제외하고
한쪽의 이름변경, 폴더위치 변경이 다른 쪽에 하등 영향을 미치지 않는다.


그런데 심볼링크는 원본쪽 변경과 링크된 쪽의 변경이 다른 의미를 갖는다.

특히 폴더에서는 심볼링크( 및 정션)가 될 때
폴더에 대한 "링크"만 링크의 의미를 갖는다고 이해해야 한다.

그리고 폴더 안의 파일에 대한 내용은
서로 같은 파일이라고 이해해야 한다
이 경우 어느 한쪽 폴더내 파일을 삭제하면 다른 쪽 파일도 같이 삭제된다.
폴더 "자체"의 링크 삭제와는 다르다. 또 하드링크와는 또 다르다.


아래 내용은 각기 다른 특성 가운데 주의할 점을 적은 것이다.
그러나 한번 생성한 다음 한쪽에서
파일의 삭제 변경 등의 테스트를 해보면서
다른 쪽과의 관계와 특성을 익히는 것이 더 쉬우리라 본다.



[ 파일에서 하드링크 생성시 ]


하드링크 생성시 mklink /h 옵션


- 같은 드라이브내에서
- 파일에 대하여서만 생성된다. ( 폴더에 대해서는 생성되지 않는다.)


원본 파일삭제시 => 하드링크로 생성한 파일 삭제되지 않음
( 파일을 삭제하려면 모든 폴더에서 같이 삭제해야 함 )

원본 파일의 파일이름, 폴더 위치 등을 변경하여도 역시 => 하드링크로 새로 생성한 파일에 영향을 주지 않음

또한 하드링크로 새로 생성한 파일의 삭제, 파일이름변경, 폴더위치 변경의 경우에도 => 역시 원본파일에 영향을 주지 않는다.



● 원본 파일의 내용변경, 하드링크로 생성한 파일의 내용변경은 서로 동일한 변경 효과를 갖는다.



하나의 파일에 어떤 하드링크가 연결되어 있는지 확인하기 위해서는
도스창에서
fsutil hardlink list "파일명" 을 입력하면 확인할 수 있다.


[ 파일에서 심볼 링크 ]

 파일간 심볼 링크 생성시 [ mklink  무옵션 ]


- 다른 드라이브 간에도 생성된다.


심볼 링크된 파일을 삭제하면 => 원본 파일은 삭제되지 않는다.
원본 파일을 삭제시 => 심볼 링크는 파일이 연결되지 않는 링크가 됨

양쪽에서 파일의 내용변경은 모두 양쪽에 적용됨


원본 파일의 파일이름, 폴더 위치 등을 변경하면 => 심볼 링크는 파일이 연결되지 않는 링크가 됨

심볼링크로 새로 생성한 파일의 삭제, 파일이름변경, 폴더위치 변경의 경우 => 원본파일에 영향을 주지 않는다. 삭제의 경우를 제외하고 이름변경, 폴더위치 변경시에는 링크도 전과 같이 된다.

● 원본 파일의 내용변경, 하드링크로 생성한 파일의 내용변경은 서로 동일한 변경 효과를 갖는다.



심볼 링크의 연결상태를 확인하기 위해서는
도스창에서
dir /AL 을 입력하면 확인할 수 있다.






[ 폴더에서 심볼링크 연결시 ]

* 폴더간 심볼링크에서는

폴더 자체의 변경과
"폴더 내 파일의 변경"은 서로 다른 의미를 가지므로 주의.


심볼링크 생성 mklink /D 옵션


[ 폴더에서]

폴더 "자체"를 심볼쪽에서 삭제 이동 이름변경하면 => 원본 폴더는 안 없어짐 (  이동, 이름 변경시에는 링크도 그대로 유지됨)
폴더 "자체"를 원본쪽에서 삭제 이동 이름변경하면 => 심볼 링크로 연결된 폴더는 링크가 깨진 폴더가 될 뿐임


[ 폴더내 "개별 파일"에 대한 -- 파일삭제 및 이름 변경시 ]

원본폴더에서 파일삭제 이름변경시 => 심볼링크 연결된 폴더안의 파일도 동일하게 삭제, 이름변경된다.

심볼폴더에서 파일삭제 이름변경시 => 원본 폴더의 파일도 동일하게 삭제, 이름변경된다.

● 이외에도 양쪽 폴더에서 
파일의 내용변경이나 폴더내 새 파일 생성은
모두 양 폴더에 동일한 변경 효과를 갖는다.

폴더에서
junction과 거의
특성이 같다.
심볼 링크의 연결상태를 확인하기 위해서는
도스창에서
dir /AL 을 입력하면 확인할 수 있다.



/// 참고 팁 ///


만일 디스크에 하드링크나 심볼링크를 만들어 놓았는데 

이를 다른 디스크에 복사하면 어떻게 되는가. 


링크가 복사되는 것이 아니고 

링크된 폴더나 파일이 복사된다. 


그래서 디스크에서 용량이 2 기가였는데 

복사해 놓은 용량은 20 기가가 되는 수도 있다. 

즉 하드링크나 심볼링크가 복사될 때는 링크가 복사되는 것이 아니라, 

실제 파일이 그대로 복사되기 때문이다. 



이런 문제를 피해보려면 

다음의 프로그램의 도움을 받아 

smart copy의 방법을 이용하면 될 것 같다. 


자세한 설명은 다음 링크를 참조해주기 바란다. 



http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html



● 추가 팁 
- 참고로 위 스크립트는 조금씩 수정 개선되어 문서작성 스크립트에 함께 포함되어 있다. - 

http://story007.tistory.com/89

한편 위 문서작성 스크립트에서는
하드링크 등을 생성하는 핫키로 링크를 생성하면 
해당 링크를 생성하는 명령이 별도 로그파일로 기록된다. [ORIGINALACT-bakup.txt]

따라서 하나의 디스크에서 하드링크 등을 생성한 다음 
다른 디스크에 이 내용을 백업하고자 할 때 
이 로그파일을 통해 ( 구체적으로 말하면 이 로그파일을 오토핫키 스크립트 형태로 실행하여 ) 
백업 디스크에서도 동일한 형태의 하드링크를 생성할 수 있게 할 수 있다. 
[ 디스크 백업시 하드링크 설정 부분이 중복 용량을 차지 않게 하는 용도임 ] 

또한 하드링크 등을 생성하여 사용중
원본파일이 어느 드라이브 어떤 폴더에 있는 파일인지 나중에 확인이 문제될 경우도 있다. 
이런 경우를 위해서도 별도의 로그 파일을 지원하고 있다. 
[ 이 추가사항들은 모두 문서작성 스크립트에 포함된 스크립트들에 적용됨 ] 





Ω♠문서정보♠Ω

™[작성자]™ Prince evilstupidmiserable Little
◑[작성일]◐ 2013-04-24-수-23시 41 분
♨[수정내역]♨ 내용추가 2013-05-25-토-12-39
▩[ 디스크 ]▩ [DISK] O:/G/G/00/파일_폴더_중복_저장방법.htm
ж[ 웹 ]ж [web] http://story007.tistory.com/840
⇔[ 관련문서]⇔
{!-- 관련 문서 링크--}
문서형식 인터넷사이트 http://essay007.tistory.com/849
디스크상 목록 o:\G\G\00\rgwh\rgwh-catalog.htm
Ш[ 관련 문서 인용 부분 ]Ш
ㅹ[ 코멘트 등 정리 내역]ㅹ









댓글