GNUEmacsManual:27

From 흡혈양파의 번역工房
Revision as of 06:24, 26 April 2016 by Onionmixer (talk | contribs) (GNU Emacs 27장 내용 추가)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Dired, 디렉터리 에디터

Dired, 디렉터리 에디터

Dired는 디렉터리 목록과 선택적으로는 그 하위디렉터리 일부를 포함하는 Emacs 버퍼를 만든다. 이 버퍼 주위로 이동하는 데에는 일반 Emacs 명령어를 사용하고, 열거된 파일에 작업하는 데에는 특수 Dired 명령어를 사용할 수 있다.


Dired 버퍼는 "읽기 전용"이므로 그 안에 텍스트의 삽입은 허용되지 않는다. 일반 출력 문자들, 즉 d 와 x 같은 문자들은 특수 Dired 명령어를 위해 재정의된다. 일부 Dired 명령어들은 현재 파일(즉 현재 버퍼의 파일)을 마크 또는 플래그(flag) 하고, 그 외 명령어들은 마크된 파일 또는 플래그된 파일에서 작용한다. 사용자는 먼저 하나의 명령어를 모든 파일에 작업하도록 특정 파일을 마크한다.


Dired-X 패키지는 Dired 모드에 다양한 추가 기능을 제공한다. Dired Extra User's Manual 을 참고한다.


C-x C-d (

list-directory

) 를 이용해 디렉터리 내 파일의 목록을 확인할 수도 있다. Dired 와 달리 이 명령어는 열거된 파일에 작업을 허용하지 않는다. 136 페이지의 15.7절 [디렉터리]를 참고한다.


Dired 들어가기

Dired 를 호출하려면 C-x d (

dired

) 를 입력한다. 이는 미니버퍼를 이용해 디렉터리명을 읽고, 해당 디렉터리에서 파일을 열거하는

Dired

버퍼를 연다. 와일드카드 파일명 패턴을 미니버퍼 인자로 제공할 수도 있는데, 이런 경우 Dired 버퍼는 해당 패턴에 일치하는 파일을 모두 열거한다. 일반 히스토리와 완성 명령어를 미니버퍼에서 이용할 수 있으며, 특히 M-n 은 방문한 파일(이 있을 경우)의 이름을 미니버퍼에 넣는다(32 페이지의 5.5절 [미니버퍼 히스토리] 참고).


C-x C-f (

find-file

) 에 디렉터리명을 제공하여 Dired 를 호출하는 방법도 있다.


dired-listing-switches

변수는 디렉터리를 열거하기 위해

ls

에 제공하는 옵션을 명시하는데, 이 문자열은 '

-1

' 을 포함해야만 한다. dired 명령어에 접두 인자를 사용할 경우 디렉터리 명세로 들어가기 전에 미니버퍼를 이용해

ls

전환을 명시해야 한다. 어떻게 명시되든

ls

전환은 인자를 요하지 않는 간략한 옵션(즉 단일 문자를 의미)과 '

=

'로 명시되는 인자를 가진 긴 옵션('

--

'로 시작)을 포함할 수 있다.


{{RoundTitleNavy|ls} 프로그램이 '

--dired

' 옵션을 지원한다면 Dired 는 자동으로 해당 옵션을 전달하며, 이로 인해

ls

는 Dired 가 파싱할 수 없는 이름을 포함하지 않으면서 특이한 특정 파일명에 대해 특수 escape 시퀀스를 방출하게 된다. 사용자가 Emacs 세션에서 Dired 를 처음으로 실행하면

ls

가 해당 옵션으로 '

--dired

' 를 한 번 호출함으로써 그것을 지원하는지 검사한다. 종료 코드(exit code)가 0 이면 Dired 는 나중에 '

--dired

' 옵션을 사용하고, 그 외의 경우 사용하지 않을 것이다. 이러한 검사는

dired-use-ls-dired

변수를 맞춤화하여 금지할 수 있다.

unspecified

(기본값) 값은 검사를 수행함을 의미하며, 그 외

nil

이 아닌 값은 '

--dired

' 옵션을 사용함을 의미하며,

nil

은 '

--dired

' 옵션을 사용하지 않음을 의미한다.


MS-Windows 와 MS-DOS 시스템에서 Emacs 는

ls

를 에뮬레이트한다. 이러한 에뮬레이션의 옵션과 특이점은 508 페이지의 G.4절 [Lisp에서 ls]를 참고한다.


Dired 버퍼를 다른 창에 표시하려면 C-x 4 d (

dired-other-window

)를 사용한다. C-x 5 d (

dired-other-frame

) 는 Dired 버퍼를 별개의 프레임에 표시한다.


q (

quit-window

) 를 입력하면 Dired 버퍼를 묻고(bury), 해당 버퍼에 대해 방금 창이 생성되었다면 그 창을 삭제한다.


Dired 버퍼에서 탐색

모든 일반적 Emacs 커서 움직임 명령어는 Dired 버퍼에서 이용 가능하다. C-nC-p 키는 행 시작보다는 행의 파일명 시작에 커서를 넣도록 재정의된다.


편의를 위해 Dired 에서 SPCnC-n 과 동일하다. pC-p 와 동일하다. (행별로 이동하는 것은 입력이 수월하므로 Dired 에서 흔한 행동이다.) DEL(상향 이동하여 플래그 해제)은 상향 이동에도 유용하다(316 페이지의 27.3절 [Dired 삭제] 참고).


j (

dired-goto-file

)는 미니버퍼를 이용한 파일명 입력을 요구하고, 해당 파일을 설명하는 Dired 버퍼 내 행으로 포인트를 이동한다.


M-s f C-s (

dired-isearch-filenames

) 는 Dired 버퍼에서 순방향 증분 검색을 실행하여 파일명에서만 일치 결과를 찾고 버퍼 내 나머지 텍스트는 무시한다. M-s f M-C-s (

dired-isearch-filenames-regexp

) 도 정규 표현식 검색을 이용하여 동일하게 수행한다.

dired-isearch-filenames

변수를

t

로 변경하면 일반적 검색 명령어는 스스로를 파일명으로 제한하는데, 가령 C-sM-s f C-s 와 같이 행동한다. 값이

dwim

일 경우 검색 명령어는 포인트가 초기에 파일명에 위치할 때에만 파일명에 매칭한다. 증분 검색에 관한 정보는 90 페이지의 12장 [검색]을 참고한다.


Dired 버퍼가 몇 개의 디렉터리를 포함할 경우 일부 추가 탐색 명령어들도 이용 가능하다. 325 페이지의 27.12절 [하위디렉터리 움직임]을 참고한다.


Dired를 이용해 파일 삭제하기

Dired는 여러 용도 중에서 삭제할 파일을 먼저 플래그하고 플래그된 파일을 삭제하는 데에 자주 사용되곤 한다.


d

이 파일을 삭제하도록 플래그한다(

dired-flag-file-deletion

).


u

삭제 플래그를 제거한다(

dired-unmark

).


DEL

이전 행으로 포인트를 옮기고 그 행에서 삭제 플래그를 제거한다(

dired-unmark-backward

).


x

삭제하도록 플래그된 파일을 삭제한다(

dired-do-flagged-delete

).


파일을 설명하는 행으로 이동하여 삭제할 파일을 플래그한 후 d (

dired-flag-file-deletion

) 를 입력한다. 삭제 플래그는 행 시작에 '

D

'로 표시된다. 이 명령어는 포인트를 다음 행으로 이동시키므로 d 명령어를 반복하면 연속 파일을 플래그한다. 수치적 접두 인자는 반복 계수의 역할을 하며, 음의 계수는 선행하는 행을 플래그함을 의미한다.


영역이 활성화되어 있다면 d 명령어는 영역 내 모든 파일을 삭제하도록 플래그하는데, 이런 경우 명령어는 포인트를 이동시키지 않으며 접두 인자를 모두 무시한다.


파일을 즉시 삭제하지 않고 삭제할 파일을 플래그하는 이유는 실수로 파일을 삭제할 위험을 줄이기 위해서다. Dired 가 플래그된 파일을 삭제하도록 지시하기 전에는 uDEL 명령어를 이용해 삭제 플래그를 제거할 수 있다. u (dired-unmark)는 d 와 같지만 플래그를 만드는 대신 플래그를 제거한다. DEL (dired-unmark-backward)는 상향으로 이동하여 플래그를 제거하므로 인자가

-1

u 와 같다. 두 명령어에 대한 수치적 접두 인자는 반복 계수의 역할을 하여 음의 계수는 반대 방향으로 플래그 해제함을 의미한다. 영역이 활성화되어 있으면 이러한 명령어들은 포인트를 움직이지 않고 영역 내 모든 파일을 플래그 해제한다.


플래그된 파일을 삭제하려면 x (

dired-do-flagged-delete

)를 입력한다. 이 명령어는 삭제하도록 플래그된 파일명의 목록을 표시하고,

yes

를 이용해 확인을 요청한다. 확인을 하면 Dired는 플래그된 파일을 삭제한 후 Dired 버퍼의 텍스트로부터 그 행을 삭제한다. 행의 수가 다소 적은 Dired 버퍼가 선택된 채로 남는다.


확인을 요청 시 no 를 응답하거나 C-g 를 이용해 종료할 경우 사용자는 즉시 Dired로 돌아가고 삭제 플래그는 버퍼에 그대로 유지되며 어떤 파일도 사실상 삭제되지 않는다.


빈 디렉터리는 여느 다른 파일처럼 삭제가 가능하지만 보통 Dired는 비어있지 않은 디렉터리는 삭제할 수 없다.

dired-recursive-deletes

변수가

nil

값이 아닌 경우 Dired 는 비어 있지 않은 디렉터리와 그 내용을 모두 삭제할 수 있다. 이는 위험 부담이 다소 높다.


delete-by-moving-to-trash

변수를 t로 변경하면 위의 삭제 명령어들은 영향을 받는 파일 또는 디렉터리를 즉시 삭제하는 대신 운영체제의 Trash(휴지통)로 이동시킬 것이다. 140 페이지의 15.10절 [다양한 파일 연산]을 참고한다.


한 번에 여러 파일 플래그하기

#, ~, % &, % d 명령어는 다수의 파일을 그 이름을 바탕으로 삭제하도록 플래그한다:


#

모든 자동 저장 파일(이름이 '

#

' 으로 시작하고 끝나는 파일)을 삭제하도록 플래그한다(133 페이지의 15.5절 [자동 저장] 참고).


~

모든 백업 파일(이름이 '

~

'로 끝나는 파일)을 삭제하도록 플래그한다(127 페이지의 15.3.2절 [백업] 참고).


.

(마침표) 초과 수치적 백업 파일을 삭제하도록 플래그한다. 어떤 파일이든 그에 대해 가장 오래되고 가장 최신 백업 파일 몇 개씩은 면제되며, 중간에 위치한 파일들만 플래그된다.


% &

파일들을 다시 쉽게 생성할 수 있다고 제시하는 특정 유형의 이름으로 된 파일을 모두 삭제하도록 플래그한다.


% d regexp RET

정규 표현식 regexp에 일치하는 이름을 가진 파일을 모두 플래그한다.


# (

dired-flag-auto-save-files

)는 자동 저장 파일처럼 생긴 이름을 가진 파일, 즉 '

#

'로 시작하여 끝나는 파일을 플래그한다. 133 페이지의 15.5절 [자동 저장]을 참고한다.


~ (

dired-flag-backup-files

)는 이름에 백업 파일이라고 나타나는 파일, 즉 '

~

'로 끝나는 파일을 모두 플래그한다. 127 페이지의 15.3.2절 [백업]을 참고한다.


. (마침표,

dired-clean-directory

)는 백업 파일 일부, 즉 어떤 파일이든 가장 오래된 파일 몇 개와 가장 최근 파일 몇 개를 제외한 모두를 삭제하도록 플래그한다. 보통은 각 파일에 대해 보관하는 최근 버전의 개수는

dired-kept-versions

(

kept-new-versions

아니다; 이것은 저장 시에만 적용된다) 변수에 의해 주어진다. 보관해야 할 가장 오래된 버전의 개수는

kept-old-versions

변수에 의해 주어진다.


C-u 3 . 에서와 같이 양의 수치적 인자가 있는 마침표는 보관할 최근 버전의 개수를 명시하며

dired-kept-versions

를 오버라이드한다. 음의 수치적 인자는 보관할 각 파일의 오래된 버전을 명시하는 인자 값에 마이너스를 붙인 것이며,

kept-old-versions

를 오버라이드한다.


% & (

dired-flag-garbage-files

)는

dired-garbage-files-regexp

변수가 명시한 정규 표현식에 일치하는 이름의 파일을 플래그한다. 기본적으로 이는 TeX 에 의해 생성된 특정 파일, '

.bak

' 파일,

patch

에 의해 생성된 '

.orig

'와 '

.rej

' 파일에 매칭한다.


% d 는 명시된 정규 표현식에 (

dired-flag-files-regexp

) 일치하는 이름의 파일을 모두 플래그한다. 파일명에서 디렉터리가 아닌 부분만 매칭에 사용된다. 일치 결과를 앵커(anchor)하는 데에는 '

^

'와 '

$

'를 사용할 수 있다.

%d

를 사용하는 동안에는 특정 하위디렉터리를 숨김으로써 마크에서 제외시킬 수 있다. 326 페이지의 27.13절 [하위디렉터리 숨기기]를 참고한다.


Dired에서 파일 방문하기

Dired 버퍼에 열거된 파일을 방문하거나 조사하기 위한 Dired 명령어가 몇 가지 있다. 이러한 명령어들은 모두 현재 행의 파일에 적용되고, 해당 파일이 실제로 디렉터리일 경우 이러한 명령어들은 그 하위디렉터리에서 Dired 를 호출한다(따로 Dired 버퍼를 만든다).


f

C-x C-f 를 입력하여 그 파일명을 제공하는 것처럼 현재 행에 설명된 파일을 방문한다(

dired-find-file

). 123 페이지의 15.2절 [방문하기]를 참고한다.


RET
e

f 와 동일하다.


o

f 와 같으나 파일의 버퍼를 표시하는 데에 다른 창을 사용한다(

dired-find-file-other-window

). Dired 버퍼는 첫 번째 창에 표시된 채로 남는다. 이것은 파일을 방문하는 데에 C-x 4 C-f 를 사용하는 것과 같다. 156 페이지의 17장 [창]을 참고한다.


C-o

현재 행에 설명된 파일을 방문하고, 버퍼를 다른 창에 표시하되 그 창을 선택하지 않는다(

dired-display-file

).


Mouse-1
Mouse-2

사용자가 클릭한 이름의 파일을 방문한다(

dired-mouse-find-file-other-window

). 이는 o 명령어와 같이 다른 창을 이용해 파일을 표시한다.


v

현재 행에 설명된 파일을 View 모드로 본다(

dired-view-file

). View 모드는 버퍼를 탐색하는 편리한 명령어를 제공하지만 변경은 금한다. 73 페이지의 11.6절 [뷰 모드]를 참고한다.


^

현재 디렉터리의 부모 디렉터리를 방문한다(

dired-up-directory

). 이는

..

에 대한 행으로 이동하여 f 를 입력하는 것과 동일하다.


Dired 마크 vs. 플래그

파일을 '

D

' 로 플래그하는 대신 다른 문자(주로 '

*

')로 파일을 마크(mark)할 수 있다. 파일에 작업하는 대부분 Dired 명령어들은 '

*

'로 마크된 파일을 사용한다. 플래그된 파일에 작업하는 유일한 명령어는 x 로, 그러한 파일을 삭제하는 기능을 가진다.


'

*

'로 마크하기, 마크해제하기, 마크에 작업하기에 사용할 수 있는 명령어 몇 가지를 소개하겠다. (파일을 플래그 및 플래그 해제(unflag)하는 명령어는 316 페이지의 27.3절 [Dired 삭제]를 참고).


m
* m

현재 파일을 '

*

' 로 마크한다(

dired-mark

). 영역이 활성화되어 있으면 영역 내 모든 파일을 대신 마크하고, 그 외의 경우 수치적 인자 n 이 제공되면 현재 파일부터 시작해 다음 n 개 파일을 대신 마크한다(n 이 음수일 경우 이전 -n 개 파일을 마크한다).


**

모든 실행 가능 파일을 '

*

' 로 마크한다(

dired-mark-executables

). 수치적 인자를 이용해 모든 파일을 마크 해제한다.


*@

모든 심볼릭 링크를 '

*

' 로 마크한다(

dired-mark-symlinks

). 수치적 인자를 이용해 모든 파일을 마크 해제한다.


*/
.

..

(

dired-mark-directories

)를 제외한 디렉터리에 해당하는 파일을 모두 '

*

' 로 마크한다(

dired-mark-directories

). 수치적 인자를 이용해 모든 파일을 마크 해제한다.


*s
.

..

(

dired-mark-subdir-files

)를 제외한 현재 하위디렉터리 내 파일을 모두 마크한다.


u
*u

이 행에 마크를 모두 제거한다(

dired-unmark

). 영역이 활성화되어 있으면 영역 내 모든 파일을 마크 해제하고, 그 외의 경우 수치적 인자

n

이 제공되면 현재 파일부터 시작해 다음 n 개 파일을 대신 마크 해제한다(n 이 음수일 경우 이전 -n 개 파일을 마크 해제한다.).


DEL
*DEL

포인트를 이전 행으로 이동하고 그 행에 있는 마크를 모두 제거한다(

dired-unmark-backward

). 영역이 활성화되어 있으면 영역 내 모든 파일을 마크 해제하고, 그 외의 경우 수치적 인자 n 이 제공되면 현재 파일부터 시작해 이전 n 개 파일을 대신 마크 해제한다(n 이 음수일 경우 다음 -n 개 파일을 마크 해제한다.).


*!
U

이 Dired 버퍼의 모든 파일로부터 마크를 모두 제거한다(

dired-unmark-all-marks

).


*? markchar
M-DEL

markchar 문자를 사용하는 마크를 모두 제거한다({{RoundTitleNavy|dired-unmark-all-files). 인자는 단일 문자이므로 RET 을 이용해 종료하지 말라. 하나의 마크 문자를 다른 마크 문자로 대체하도록 해주는 아래

  • c 명령어의 설명을 참고하라.
수치적 인자를 이용해 이 명령어는 마크된 파일마다 질의를 하여 그 마크를 제거할 것인지 묻는다. 제거할 경우 사용자는
y
를, 제거하지 않을 경우
n
을, 질문하지 않고 나머지 파일에서 마크를 제거할 경우
!
로 답한다.


*C-n
M-}

다음 마크된 파일로 하향 이동한다(

dired-next-marked-file

). 어떤 유형의 마크든 갖고 있다면 파일은 "마크"되어 있다.


*C-p
M-{

이전 마크된 파일로 상향 이동한다(

dired-prev-marked-file

).


t
*t

모든 마크를 토글한다(

dired-toggle-marks

): '

*

' 로 마크된 파일은 마크 해제되고, 마크가 해제된 파일은 '

*

' 로 마크된다. 다른 방식으로 마크된 파일은 영향을 받지 않는다.


*c old-markchar new-markchar

old-markchar 문자를 이용하는 마크를 모두 new-markchar 문자를 이용한 마크로 대체한다(

dired-change-marks

). 이 명령어는 '

*

' 또는 '

D

' 가 아닌 마크를 생성하거나 사용하는 주된 방법이다. 인자는 단일 문자로 되어 있으므로 RET 을 이용하여 종료하지 말라.

다양한 파일 클래스를 구별하는 데에 있어 이 명령어를 이용하여 어떤 문자든 마크 문자로 사용할 수 있다. old-markchar 가 공백(' ')일 경우 명령어는 마크 해제된 파일에 모두 작동하고, new-markchar 가 공백일 경우 명령어는 그것이 작동하는 파일을 마크 해제한다.
이 명령어의 효과를 보이기 위해 마크가 없는 파일에 '
D
' 플래그를 놓고 이미 '
D
' 플래그를 가진 파일에는 플래그 해제하는 방법을 소개하겠다:
* c D t * c SPC D * c t SPC
이는 어떤 파일도 '
t
' 로 마크되어 있지 않는다는 가정 하에 예를 든 것이다.


% m regexp RET
* % regexp RET

이름이 정규 표현식 regexp에 일치하는 모든 파일을 ('*'로) 마크한다(dired-mark-files-regexp). 이 명령어는

%d

와 같은데, '

D

' 로 플래그하는 대신 '

*

' 로 파일을 마크한다는 점이 다르다.

파일명에서 디렉터리가 아닌 부분만 매칭에 사용된다. 매치를 앵커하려면 '
^
' 와 '
$
' 를 사용한다. 하위디렉터리를 일시적으로 숨김으로써 제외시킬 수도 있다(326 페이지의 27.13절 [하위디렉터리 숨기기] 참고).


% g regexp RET

정규 표현식 regexp 에 대한 일치 결과를 포함하는 내용을 가진 모든 파일을 ('

*

'로) 마크한다(

dired-mark-files-containing-regexp

). 이 명령어는

%m

과 같으나 파일명 대신 파일 내용을 검색한다는 점이 다르다.


C-/
C-x u
C-_

Dired 버퍼에서 마크를 추가하거나 제거하는 등 변경 내용을 실행취소한다(

dired-undo

). 이 명령어는 실제 파일 연산을 되돌리거나 손실된 파일을 복구시키지 않는다! 그저 버퍼 자체에 일어난 변경 내용을 실행 취소할 뿐이다.

일부 사례에서는 파일에 작업하는 명령어 다음에 이것을 이용하면 문제를 야기하기도 한다. 예를 들어 하나 또는 그 이상의 파일을 명명한 다음
dired-undo
를 실행하면 Dired 버퍼에서 원래 이름을 복구시켜 Dired 버퍼를 디렉터리의 실제 내용과 동기화되지 않도록 만든다.


파일에 작업하기

이번 절에서는 하나 또는 여러 파일에 작업하는 기본 Dired 명령어를 설명한다. 이러한 명령어들은 모두 대문자로 되어 있으며, 모두들 인자를 읽거나 승인을 요청하기 위해 작업 전에 미니버퍼를 사용한다. 이러한 명령어들은 모두 조작할 파일을 다음과 같은 방식으로 명시하도록 해준다:

  • 사용자가 명령어에 수치적 접두 인자 n 을 제공하면 현재 파일부터 시작해 다음 n 개 파일에 작업한다. (n 이 음수이면 명령어는 현재 행을 선행하는 -n 개 파일에 작업한다.)
  • 그 외에 일부 파일이 '
    *
    ' 로 마크되어 있으면 명령어는 그러한 파일 모두에 작업한다.
  • 그 외에는 명령어가 현재 파일에만 작업한다.


! 와 '%' 명령어를 비롯해 기타 특정 Dired 명령어도 동일한 규칙을 이용하여 어떤 파일에 작업할 것인지 결정한다.


파일의 복사와 재명명 또는 그에 대한 링크를 생성하는 명령어를 포함해 목적지(destination) 디렉터리를 요청하는 명령어들은 연산의 기본 대상 디렉터리를 짐작한다. 보통은 Dired 버퍼의 기본 디렉터리를 제시하지만

dired-dwim-target

변수가

nil

이 아닐 경우, 그리고 다음 창에 다른 Dired 버퍼가 표시되어 있을 경우 그 다른 버퍼의 디렉터리가 대신 제시된다.


파일에 작업하는 파일 조작 Dired 명령어들을 소개하겠다.

C new RET

명시된 파일을 복사한다(

dired-do-copy

). 인자 new 는 복사하여 넣을 디렉터리, 또는 (단일 파일을 복사할 경우) 새 이름이 된다. 이는 셸 명령어

cp

와 같다.

dired-copy-preserve-time
nil
값이 아닐 경우 이 명령어를 이용해 복사하면 '
cp -p
'와 같이 복사본에 오래된 파일의 수정 일자를 유지한다.
Template:Dired-recursive-copies 변수는 디렉터리를 재귀적으로 복사할 것인지를 관리한다('
cp -r
'과 같이). 기본값은
top
으로, 디렉터리를 재귀적으로 복사하기 전에 질문을 한다.


D

명시된 파일을 삭제한다(

dired-do-delete

). 이는 셸 명령어

rm

과 같다.

이번 절에 실린 다른 명령어들과 마찬가지로 이 명령어는 마크된 파일 또는 다음
n
개 파일에 작동한다. 반면 x (
dired-do-flagged-delete
) 는 모든 플래그된 파일을 삭제한다.


R new RET

명시된 파일을 재명명한다(

dired-do-rename

). 단일 파일을 재명명할 경우 인자 new 가 파일의 새로운 이름이다. 여러 개의 파일을 재명명하면 인자 new 는 파일을 이동시키는 디렉터리가 된다(셸 명령어

mv

와 같다).

Dired는 재명명된 파일과 관련된 버퍼의 방문된 파일명이 새로운 이름을 참조하도록 자동 변경한다.


H new RET

명시된 파일로의 하드 링크를 만든다(

dired-do-hardlink

). 셸 명령어

ln

과 같다. 인자 new 는 링크를 만들 디렉터리 또는 링크에 붙일 이름(하나의 링크만 만들 경우)이다.


S new RET

명시된 파일로의 심볼릭 링크를 만든다(

dired-do-symlink

). '

ln -s

'와 같다. 인자 new 는 링크를 만들 디렉터리 또는 링크에 붙일 이름(하나의 링크만 만들 경우)이다.


M modespec RET

명시된 파일의 모드를 (권한 비트라고도 부름) 변경한다(

dired-do-chmod

). modespec

chmod

프로그램이 처리하는 인자와 같이 8진수 또는 심볼릭 표기법이 가능하다.


G newgroup RET

명시된 파일의 그룹을 newgroup 으로 변경한다(

dired-do-chgrp

).


O newowner RET

명시된 파일의 소유자를 newowner 로 변경한다(

dired-do-chown

). (대부분 시스템에서는 superuser 만 이를 실행할 수 있다.)

dired-chown-program
변수는 작업을 실행하는 데에 사용할 프로그램 이름을 명시한다(다른 시스템들은 다른 위치에
chown
을 놓는다).


T timestamp RET

명시된 파일을 touch 한다(

dired-do-touch

). 수정 시간을 현재 시간으로 업데이트함을 의미한다. 이는 셸 명령어

touch

와 같다.


P command RET

명시된 파일을 출력한다(

dired-do-print

). 출력에 사용할 명령어를 명시해야 하지만 미니버퍼는

lpr-command

lpr-switches

변수(

lpr-buffer

가 사용하는 것과 동일한 변수; 397 페이지의 31.6절 [출력하기]를 참고)를 이용한 적절한 짐작으로 시작한다.


Z

명시된 파일을 압축한다(

dired-do-compress

). 파일이 이미 압축된 파일로 나타날 경우 대신 압축해제한다.


:d

명시된 파일을 해독한다(

epa-dired-do-decrypt

). EasyPG Assistant User's Manual 의 "Dired inte­gration" 절을 참고한다.


:v

명시된 파일에 디지털 서명을 확인한다(

epa-dired-do-verify

). EasyPG Assistant User's Manual 의 "Dired inte­gration" 절을 참고한다.


:s

명시된 파일을 디지털 서명한다(

epa-dired-do-sign

). EasyPG Assistant User's Manual 의 "Dired inte­gration" 절을 참고한다.


:e

명시된 파일을 해독한다(

epa-dired-do-encrypt

). EasyPG Assistant User's Manual 의 "Dired inte­gration" 절을 참고한다.


L

명시된 Emacs Lisp 파일을 로딩한다(

dired-do-load

). 276 페이지의 24.8절 [Lisp 라이브러리]를 참고한다.


B

명시된 Emacs Lisp 파일을 바이트 컴파일한다(dired-do-byte-compile). The Emacs Lisp Reference Manual의 "Byte Compilation"절을 참고한다.


A regexp RET

정규 표현식 regexp 에 대해 명시된 파일을 모두 검색한다(

dired-do-search

).

이 명령어는
tags-search
의 변형체다. 첫 번째 일치 결과를 찾으면 그곳에서 검색이 중지되며, 검색을 재개하여 다음 일치 결과를 검색하려면 M-, 를 사용한다. 306 페이지의 25.3.6절 [태그 검색]을 참고한다.


Q regexp RET to RET

명시된 파일마다

query-replace-regexp

를 실행하여 regexp 에 대한 일치 결과를 문자열 to 로 대체한다(

dired-do-query-replace-regexp

).

이 명령어는
tags-query-replace
의 변형체다. 쿼리 대체 루프를 종료할 경우, 스캔을 재개하여 추가 일치 결과를 대체하려면 M-, 를 사용한다. 306 페이지의 25.3.6절 [태그 검색]을 참고한다.


Dired에서 셸 명령어

Dired 명령어 ! (

dired-do-shell-command

)는 미니버퍼에서 셸 명령어 문자열을 읽고, 하나 또는 그 이상의 파일에 셸 명령어를 실행한다. 셸 명령어가 작용하는 파일은 Dired 명령어의 일반적인 방식으로 결정된다(320 페이지의 27.7절 [파일에 작동하기] 참고). 명령어 X! 와 동의어다.


명령어 & (

dired-do-async-shell-command

) 역시 동일한 일을 수행하지만 셸 명령어를 비동기식으로 실행한다는 차이가 있다. (셸 명령어의 끝에 '

&

' 문자를 추가하여 ! 역시 동일한 방식으로 적용할 수 있다.) 명령어가 하나 이상의 파일에서 작동하면 명시된 셸 명령어의 여러 유사한 복사본을 파일당 하나씩 실행한다. 한 가지 예외로, 명시된 셸 명령어가 '

;

' 또는 '

;&

'로 끝나면 셸 명령어는 각 파일의 배경에서 순차적으로 실행되고 Emacs 는 다음 명령어를 실행하기 전에 호출된 셸 명령어가 종료될 때까지 기다린다.


!

&

의 경우 셸 명령어에 대한 작업 디렉터리는 Dired 버퍼의 최상위 수준 디렉터리다.


만약

!

또는

&

에게 하나 이상의 파일에서 작업하라고 알리면 셸 명령어 문자열이 그러한 파일이 어떻게 셸 명령어로 전달되는지를 결정한다.

  • 명령어 문자열에서 공백으로 둘러싸인 '
    *
    ' 를 사용하면 명령어는 '
    *
    ' 에 대체한 파일명 목록과 함께 한 번만 실행된다. Dired 버퍼에서 표시되는 순서로 이름이 정렬된다.
    따라서 ! tar cf foo.tar * RET 은 파일명 전체 목록에서
    tar
    를 실행하여
    foo.tar
    라는 하나의
    tar
    파일로 넣는다.
    주위에 공백을 둔 셸 와일드카드로서 '
    *
    '를 사용하고자 한다면 '
  • ""'라고 쓴다. 셸에서 이것은 '
    *
    ' 와 동일하지만 '
    *
    ' 는 공백으로 둘러싸이지 않았기 때문에 Dired 가 특별하게 취급하지 않는다.
  • 그 외에 명령어 문자열이 공백으로 둘러싸인 '
    ?
    ' 를 포함한다면 Emacs는 파일마다 셸 명령어를 한 번씩 실행하여 현재 파일명에서 매번 '
    ?
    ' 를 대체한다. 명령어에서 '?'를 한 번 이상 사용 가능하며, 동일한 파일명이 매 발생마다 대체한다.
  • 명령어 문자열이 '
    *
    '와 '
    ?
    ' 둘 다 포함하지 않을 경우 Emacs 는 셸 명령어를 파일마다 한 번씩 실행하고 파일명을 끝에 추가한다. 예를 들어 ! uudecode RET 은 각 파일마다
    uudecode
    를 실행한다.


파일명을 좀 더 복잡하게 반복하려면 명시적 셸 루프를 사용한다. 예를 들어, 입력 파일명 뒤에 '

.uu

' 를 추가함으로써 출력 파일명을 만들어 각 파일을 uuencode 하는 방법을 소개하겠다:

for file in * ; do uuencode "$file" "$file" >"$file".uu; done


!& 명령어는 어떤 파일이 변경될 것인지 모르기 때문에 새로운 파일이나 수정된 파일을 표시하도록 Dired 버퍼를 업데이트하려는 시도를 하지 않는다. Dired 버퍼를 업데이트하기 위해서는 g 명령어를 사용한다(326 페이지의 27.14절 [Dired 업데이트하기] 참고).


Dired 밖에서 셸 명령어를 실행하는 것과 관련된 정보는 383 페이지의 31.4.1절 [단일 셸]을 참고한다.


Dired에서 파일명 변형하기

이번 절에서는 체계적 방식으로 파일명을 수정하는 Dired 명령어를 설명한다. 각 명령어는 이미 존재하는 이름을 변형시킴으로써 만든 새로운 이름을 이용하여 마크된 파일 일부 또는 모두에 작업한다.


기본 Dired 파일조작 명령어와 같이 (320 페이지의 27.7절 [파일에 작업하기] 참고) 여기 소개된 명령어들도 다음 n 개 파일 또는 '

*

' 로 마크된 모든 파일 또는 현재 파일에서 작업한다. (파일을 마크하려면 318 페이지의 27.6절 [마크 vs. 플래그]에 설명된 명령어를 사용한다.)


이번 절에 설명된 명령어는 모두 대화형으로 작동하므로 각 대안 파일에 대한 연산을 확인하도록 요구할 것이다. 따라서 사용자는 실제로 작업할 필요가 있는 수보다 더 많은 파일을 선택하여 (예: 다수의 파일에 일치하는 regexp 를 이용), 명령어가 확인을 요청하면

y

또는

n

을 입력하여 선택된 이름을 필터링할 수 있다.


% u

선택된 파일 각각을 대문자로 된 이름으로 재명명한다(

dired-upcase

). 오래된 파일명이

Foo

bar

일 경우 새로운 이름은

FOO

BAR

가 된다.


% l

선택된 파일 각각을 소문자로 된 이름으로 재명명한다(

dired-downcase

). 오래된 파일명이

Foo

bar

일 경우 새로운 이름은

foo

bar

가 된다.


% R from RET to RET
% C from RET to RET
% H from RET to RET
% S from RET to RET

이 네 가지 명령어는 오래된 파일명으로부터 정규표현식 대체로 인한 새 이름을 계산하여 딱딱한 링크와 부드러운 링크를 재명명, 복사, 생성한다.


4개의 정규 표현식 대체 명령어는 선택된 파일명에서 검색-대체를 효과적으로 실행한다. 이들은 두 개의 인자를 읽는데, 정규 표현식 from 과 대체 패턴 to 로, 각 "오래된" 파일을 일치시킬 대상(from)에 일치시킨 후 일치하는 부분을 to 로 대체한다.

replace-regexp

에서와 같이 to 에서 '

\&

'와 '

\digit

' 를 사용하여 오래된 파일명에서 어떤 패턴의 전체 또는 일부가 일치하였는지를 나타낸다(103 페이지의 12.10.2절 [Regexp 대체] 참고). 정규 표현식이 파일명에서 한 번 이상 일치하면 첫 번째 일치 결과만 대체된다.


예를 들어 % R ^.*$ RET x-\& RET 은 이름 앞에 '

x-

' 를 추가함으로써 선택된 파일마다 이름을 다시 정한다. 파일명의 앞에서 '

x-

' 를 제거하여 이것을 되돌릴 수도 있는데, % R ^x-\(.*\)$ RET \1 RET 이 한 가지 방법이고, % R ^x- RET RET 도 이용할 수 잇다. (전체 파일명에 걸쳐야 하는 일치 결과를 앵커하려면 '

^

' 와 '

$

' 를 사용한다.)


대체 과정에서 파일의 디렉터리명을 고려하지 않으며, 디렉터리 내에 파일명에 작업하는 것이 보통이다. 사용자가 수치적 인자를 0으로 명시하면 대체는 디렉터리명을 포함해 전체적인 절대 파일명에 영향을 미친다. (0이 아닌 인자는 작업할 파일 개수를 명시한다.)


파일에 작업하기 위해 사용할 것과 동일한 regexp from 을 이용해 작업할 파일 집합을 선택하길 원할 수도 있다. 이를 위해선 % m from RET 을 이용해 파일을 마크한 후 파일에서 작업할 명령어에서 동일한 정규 표현식을 사용한다. 좀 더 편리한 사용을 위해 파일에 작업할 % 명령어는 여느 % 명령어든 그곳에서 명시된 마지막 정규 표현식을 기본값으로 사용한다.


Dired를 이용한 파일 비교

= (

dired-diff

) 명령어는 현재 파일(포인트에 위치한 파일)을

diff

프로그램을 이용하여 다른 파일(미니버퍼를 사용해 읽음)과 비교한다. 미니버퍼로 명시된 파일은

diff

의 첫 번째 인자이고, 포인트에 있는 파일은 두 번째 인자이다.

diff

프로그램의 출력은

diff

모드를 이용해 버퍼에 표시된다(137 페이지의 15.8절 [파일 비교하기] 참고).


영역이 활성화되어 있으면 미니버퍼를 이용해 읽은 파일에 대한 기본값은 마크에 위치한 파일이다(예: Dired 마크가 아니라 일반 Emacs 마크; 45 페이지의 8.1절 [마크 설정하기] 참고). 그 외에 포인트에 위치한 파일이 백업 파일을 갖고 있다면 (127 페이지의 15.3.2절 [백업] 참고) 그것이 기본값이 된다.


Dired에서 하위디렉터리

Dired 버퍼는 주로 하나의 디렉터리만 표시하지만 그 하위디렉터리를 선택적으로 포함할 수도 있다.


하나의 Dired 버퍼에 다수의 디렉터리를 포함시키는 가장 간단한 방법은

ls

를 실행하는 데에 '

-lR

' 을 명시하는 방법이다. (Dired를 실행할 때 수치적 인자를 제공하면 이러한 옵션을 미니버퍼에서 명시할 수 있다.) 그러면 모든 수준의 모든 하위디렉터리를 포함하는 재귀적 디렉터리 목록이 생성된다.


구체적인 하위디렉터리만 표시하길 원할 때도 자주 발생할 것이다. 그때는 I (

dired-maybe-insert-subdir

) 를 이용하면 된다:


i

추후 버퍼에 하위디렉터리의 내용을 삽입한다.


디렉터리에 해당하는 파일을 설명하는 행에서 이 명령어를 사용할 경우 해당 디렉터리의 내용을 동일한 Dired 버퍼로 삽입하고 그곳으로 이동시킨다. 삽입된 하위디렉터리 내용은 '

ls-lR

' 출력에서와 마찬가지로 Dired 버퍼의 최상위 수준 디렉터리를 따른다.


하위디렉터리의 내용이 이미 버퍼에 있을 경우 i 명령어는 그곳으로 이동시킬 뿐이다.


어떤 경우든 i 는 내용을 이동하기 전에 Emacs 마크를 설정하므로 C-u C-SPC 를 이용하면 Dired 버퍼에서 이전 위치로 돌아갈 것이다(45 페이지의 8.1절 [마크 설정하기] 참고). 동일한 Dired 버퍼에서 부모 디렉터리로 돌아가기 위해 '

^

' 를 사용할 수도 있다(318 페이지의 27.5절 [Dired 방문하기] 참고).


l 명령어 (

dired-do-redisplay

) 를 사용하여 하위디렉터리의 내용을 업데이트하고, 하위디렉터리 제목 행에서 C-u k 를 이용하여 하위디렉터리 목록을 제거하라(326 페이지의 27.14절 [Dired 업데이트하기] 참고). 삽입된 하위디렉터리를 숨기거나 표시할 수도 있다(326 페이지의 27.13절 [하위디렉터리 숨기기] 참고).


하위디렉터리를 거쳐 이동하기

Dired 버퍼가 하위디렉터리를 열거하면 C-x [C-x ] 라는 페이지 움직임 명령어를 이용해 전체 디렉터리만큼 이동할 수 있다(211 페이지의 22.4절 [페이지] 참고).


아래 명령어들은 하나의 Dired 버퍼 내에서 디렉터리 트리를 거쳐 이동할 뿐만 아니라 상향 및 하향 이동한다. 또한 디렉터리의 내용 시작에서 디렉터리명을 제공하는 행인 디렉터리 헤더 행(directory header line)으로 이동하기도 한다.


C-M-n

수준과 상관없이 다음 하위디렉터리 헤더 행으로 이동한다(

dired-next-subdir

).


C-M-p

수준과 상관없이 이전 하위디렉터리 헤더 행으로 이동한다(

dired-prev-subdir

).


C-M-u

부모 디렉터리의 헤더 행으로 상향 이동한다(

dired-tree-up

).


C-M-d

디렉터리 트리에서 첫 번째 하위디렉터리의 헤더 행까지 하향 이동한다(

dired-tree-down

).


<

이전 디렉터리 파일 행으로 상향 이동한다(

dired-prev-dirline

). 이러한 행들은 부모 디렉터리에서 디렉터리를 파일로 설명하는 행들이다.


>

다음 디렉터리 파일 행으로 하향 이동한다(

dired-prev-dirline

).


하위디렉터리 숨기기

하위디렉터리를 숨긴다(hiding)라는 것은 헤더 행을 제외하고 모두 표시하지 않음을 의미한다.


$

포인트가 위치한 하위디렉터리를 숨기거나 표시하고, 다음 하위디렉터리로 포인트를 이동한다(

dired-hide-subdir

). 이것은 토글 기능이다. 수치적 인자는 반복 계수 역할을 한다.


M-$

Dired 버퍼의 모든 하위디렉터리를 숨기고, 헤더 행만 남겨둔다(

dired-hide-all

). 아니면 현재 숨겨진 하위디렉터리가 있을 경우 디렉터리를 모두 다시 표시한다. 이 명령어를 이용해 하위디렉터리를 저 멀리 재빠르게 이동시키거나 매우 깊은 디렉터리 트리에서 개요를 확인할 수도 있다.


일반 Dired 명령어는 숨겨진 하위디렉터리의 파일은 절대 고려하지 않는다. 가령 마크된 파일에서 작동하는 명령어들은 숨겨진 디렉터리에 위치한 파일이 설사 마크되어 있다 하더라도 그러한 파일은 무시한다. 따라서 숨김을 사용하면 그러한 하위디렉터리에 있는 파일에 Dired 마크를 제거할 필요 없이 연산으로부터 하위디렉터리를 임시로 제외시킬 수 있다.


하위디렉터리 목록을 삽입하는 방법은 325 페이지의 27.11절 [Dired에서 하위디렉터리]를 참고하고, 삭제 방법은 326 페이지의 27.14절 [Dired 업데이트하기]를 참고한다.


Dired 버퍼 업데이트하기

이번 절에서는 Dired 버퍼를 디렉터리 및 파일에 일어난 외부 (non-Dired) 변경 사항을 반영하도록 업데이트하고 Dired 버퍼 일부를 삭제하는 데에 사용하는 명령어를 설명한다.


g

Dired 버퍼의 전체 내용을 업데이트한다(

revert-buffer

).


l

명시된 파일을 업데이트한다(

dired-do-redisplay

). 파일 연산과 동일한 방식으로 l에 대해 파일을 명시한다.


k

명시된 file lines 를 삭제하되 파일은 삭제하지 말고 행만 삭제한다(

dired-do-kill-lines

).


s

알파벳순과 날짜/시간순을 토글한다(

dired-sort-toggle-or-edit

).


C-u s switches RET

switches

dired-listing-switches

로 사용하여 Dired 버퍼를 새로고침한다.


g (

revert-buffer

)를 입력하면 열거된 파일과 디렉터리에 적용된 변경 사항을 바탕으로 Dired 버퍼의 내용을 업데이트한다. 이는 사라진 파일에 마크를 제외한 모든 마크를 유지한다. 숨겨진 하위디렉터리는 업데이트되지만 숨겨진 채로 남는다.


파일 일부만 업데이트하려면 l (

dired-do-redisplay

)를 입력한다. Dired 파일 연산 명령어와 같이 이 명령어는 다음 n 개 파일(또는 이전 -n 개 파일), 또는 마크된 파일이 있다면 그러한 파일, 또는 현재 파일에서 작동한다. 파일을 업데이트한다는 것은 파일의 현재 상태를 읽은 다음 그러한 상태를 나타내도록 버퍼 내 해당하는 행을 업데이트함을 의미한다.


하위디렉터리 제목 행에서 l 을 사용하면 그에 상응하는 하위디렉터리의 내용을 업데이트한다.


C-x d 또는 다른 Dired 명령어를 이용해 이미 Dired 버퍼에 표시되는 디렉터리를 방문할 경우, Dired 는 그 버퍼로 전환되지만 업데이트하지는 않는다. 버퍼가 최신 상태가 아니라면 Dired 는 g 를 누르면 업데이트가 된다는 경고를 표시한다. 이때 사용자는

dired-auto-revert-buffer

변수를

nil

이 아닌 값으로 변경함으로써 사용자가 Dired 버퍼를 방문할 때마다 각 버퍼로 자동으로 되돌리도록(revert) Emacs 에게 알려줄 수 있다.


버퍼로부터 파일을 삭제하지 않고 파일 행(file lines)을 삭제하기 위해서는 k (

dired-do-kill-lines

)를 입력한다. 파일 연산 명령어와 마찬가지로 이 명령어는 다음 n 개 파일에, 또는 마크된 파일에 있다면 그러한 파일에서 작동한다. 하지만 현재 파일에서는 작동하지 않는 것이, k 를 잘못 입력할 경우 번거로워지기 때문이다.


Dired 버퍼에 하위디렉터리로서 삽입한 디렉터리 파일에 대한 행을 k 를 입력하여 제거할 경우 (325 페이지의 27.11절 [Dired에서 하위디렉터리] 참고) 하위디렉터리 목록까지 제거된다. 하위디렉터리에 대한 제목 열에서 C-u k 를 입력하여도 Dired 버퍼로부터 하위디렉터리 행을 제거한다.


g 명령어는 이러한 방식으로 사용자가 제거한 개별 행을 다시 가져오지만 하위디렉터리는 가져오지 않으며, 하위디렉터리를 재삽입하려면 i 를 사용해야 한다.


Dired 버퍼의 파일들은 보통 알파벳순이나 파일명순으로 열거된다. 아니면 Dired 가 날짜/시간 별로 정렬할 수도 있다. Dired 명령어 s (

dired-sort-toggle-or-edit

)는 이 두 가지 정렬 모드를 전환한다. Dired 버퍼 내 모드 행은 현재 어떤 방식으로 정렬되어 있는지 (이름순 또는 날짜순) 나타낸다.


C-u s switches RET

dired-listing-switches

에 대한 새로운 값을 명시하도록 해준다.


Dired와 find

파일 선택에 find 유틸리티를 이용하면 Dired 버퍼에 표시할 파일 집합을 좀 더 유연하게 선택할 수 있도록 해준다.


와일드카드 패턴에 일치하는 이름의 파일을 검색하려면 M-x find-name-dired 를 사용한다. 이는 directory 와 pattern 인자를 읽고, pattern에 일치하는 이름을 가진 directory 및 그 하위디렉터리에서 모든 파일을 선택한다.


따라서 선택된 파일은 일반 Dired 명령어를 이용할 수 있는 Dired 버퍼에 표시된다.


파일명보다 파일 내용을 검사하고 싶다면 M-x find-grep-dired 를 사용한다. 이 명령어는 두 개의 미니버퍼 인자, directory와 regexp를 읽고, regexp에 대한 일치 결과를 포함하는 directory 및 그 하위디렉터리 내 파일을 모두 선택한다. 이것은

find

grep

이란 프로그램을 실행함으로써 작동한다. 관련 내용은 264 페이지의 24.4절 [Grep 검색]에 실린 M-x grep-find 도 참고한다. Emacs가 아니라 grep에 대한 정규 표현식을 써야 함을 명심한다. (내용이 주어진 regexp 에 일치하는 파일을 표시하는 대안적 방법으로 %g regexp 명령어가 있는데, 이 내용은 318 페이지의 27.6절 [마크 vs. 플래그]를 참고한다.


이 시리즈에서 가장 일반적인 명령어는

find

가 검사할 수 있는 조건을 명시하도록 해주는 M-x find-dired 이다. 이는 두 개의 미니버퍼 인자, directoryfind-args 를 취하고, directory 에서

find

를 실행하여

find-args

를 전달하면서 어떤 조건을 검사할 것인지

find

에게 알려준다. 이 명령어를 사용하려면

find

를 사용하는 방법도 알아야 한다.


이러한 명령어들이 만드는 목록의 포맷은

find-ls-option

변수로 제어된다. 이는 한 쌍의 옵션으로 되어 있는데, 첫 번째는 파일 목록을 생성하기 위해

find

를 호출하는 방법을 명시하고, 두 번째는 Dired 에게 출력값을 파싱하라고 알려준다.


M-x locate 명령어는

locate

프로그램에 비슷한 인터페이스를 제공한다. M-x locate-with-filter 도 비슷하지만 주어진 정규 표현식과 비슷한 이름을 가진 파일만 보관한다는 점이 다르다.


이러한 버퍼들은 전체적으로 일반 Dired 버퍼처럼 작동하지는 않는데, 파일 연산은 작동하지만 버퍼를 항상 자동으로 업데이트하지는 않기 때문이다. g 를 이용한 버퍼 되돌리기는 삽입된 하위디렉터리를 모두 삭제하고 모든 플래그와 마크도 삭제하게 된다.


Dired 버퍼 편집하기

Wdired 는 Dired 버퍼를 직접 편집하여 파일 연산을 실행하도록 해주는 특수 모드이다("Wdired" 에서 "W" 는 "쓰기 가능" 을 의미한다). Wdired 모드로 들어가려면 Dired 버퍼에서 C-x C-q (

dired-toggle-read-only

)를 입력한다. 아니면 '

Immediate / Edit File Names

' 메뉴 항목을 사용한다.


Wdired 모드에 있는 동안 Dired 버퍼에 표시되는 파일명을 편집하여 파일을 재명명할 수 있다. 직사각형(rectangle) 연산과

query-replace

를 포함해 모든 일반 Emacs 편집 명령어들을 여기에서 이용할 수 있다. 편집이 완료되면 C-c C-c (

wdired-finish-edit

) 을 입력한다. 이는 변경 사항을 적용하고 일반 Dired 모드로 다시 전환한다.


파일을 단순히 재명명하는 것 외에도 새 파일명(절대 또는 상대적 이름)을 입력함으로써 다른 디렉터리로 파일을 이동할 수 있다. 삭제를 위한 파일을 표시하려면 전체 파일명을 삭제한다. 심볼릭 링크 대상을 변경하려면 링크명 옆에 표시되는 링크 대상 이름을 편집한다.


버퍼에서 파일크기나 수정 일자와 같은 나머지 텍스트는 읽기 전용으로 표시되므로 사용자는 편집할 수 없다. 하지만

wdired-allow-to-change-permissions

t

로 변경하면 파일 권한을 편집할 수 있다. 가령 '

-rw-r--r--

' 를 '

-rw-rw-rw-

' 로 변경하면 파일을

world-writable

로 만들 수 있다. 이러한 변경 사항은 사용자가 C-c C-c 를 입력하면 효력을 발휘한다.


Dired에서 이미지 섬네일 보기

Image-Dired 는 이미지 파일을 보는 기능이다. 이것은 이미지를 Emacs 안에 또는 외부 뷰어를 통해 섬네일 또는 전체 크기로 볼 수 있는 기능을 제공한다.


Image-Dired 로 들어가려면 Dired 버퍼에서 자신이 보고 있는 이미지 파일을 m 을 이용해 표시한다. 그리고 C-t d (

image-dired-display-thumbs

) 를 입력한다. 그러면 마크된 파일에 상응하는 image-dired 를 포함한 버퍼를 생성하여 전환한다.


M-x image-dired 를 입력하면 Image-Dired 로 직접 들어갈 수 있다. 그러면 디렉터리의 입력을 요구하는데, 그때 사용자는 이미지 파일을 가진 디렉터리를 명시하면 된다. 그러면 해당 디렉터리 내 모든 이미지에 대한 섬네일을 생성하고, "thumbnail buffer" 에 모든 섬네일을 표시한다. 디렉터리가 다수의 이미지 파일을 포함할 경우 긴 시간이 소요되며, 이미지 파일의 개수가

image-dired-show-all-from-dir-max-files

를 초과하면 확인을 요청한다.


섬네일 버퍼에서 포인트가 있을 때 RET (

image-dired-display-thumbnail-original-image

) 를 입력하면 다른 창에 크기가 조정된 버전을 표시한다. 이것은 이미지가 창에 들어맞도록 조정한다. 화살표 키를 이용해 버퍼 내에서 이동한다. 쉽게 보려면 SPC (

image-dired-display-next-thumbnail-original

)을 이용해 다음 이미지로 넘어가 표시한다. DEL (

image-dired-display-previous-thumbnail-original

)을 입력하면 이전 섬네일로 돌아가 그것을 대신 표시한다.


이미지를 원본 크기로 보려면 RET 을 입력하기 전에 접두 인자(C-u)를 제공하거나 C-RET (

image-dired-thumbnail-display-external

) 을 입력하여 외부 뷰어로 이미지를 표시한다. 우선

image-dired-external-viewer

를 설정해야 한다.


Image-Dired 를 통해 이미지를 삭제할 수도 있다. d (

image-dired-flag-thumb-original-file

)를 입력하면 Dired 버퍼에서 삭제할 이미지 파일을 플래그할 수 있다. C-d (

image-dired-delete-char

) 를 이용하면 섬네일 버퍼로부터 섬네일 이미지를 삭제할 수도 있다.


좀 더 고급 기능으로는 이미지 파일을 분류화하는 데에 메타데이터가 사용되는 이미지 태그라는 기능이 있다. 태그는

image-dired-db-file

이 설정한 일반 텍스트 파일에 보관된다.


이미지 파일을 태그하려면 dired 버퍼에서 마크하고 (m 을 입력하면 섬네일 버퍼로부터 Dired의 파일을 마크할 수도 있다) C-t t (

image-dired-tag-files

)를 입력한다. 이는 미니버퍼에서 태그명을 읽는다. 특정 태그를 가진 파일을 마크하려면 C-t f (

image-dired-mark-tagged-files

) 를 입력한다. 특정 태그가 달린 이미지 파일을 마크하고 나면 C-t d 를 입력하여 본다.


t t 를 입력하여 섬네일 버퍼로부터 파일을 직접 태그하고, t r 을 입력하여 태그를 제거할 수도 있다. 각 파일에 대해 "주석" 이라는 특수 "태그" 도 있다(다른 태그와 동일한 의미는 아니며, 약간 다르게 취급된다). 이러한 유형의 태그는 이미지에 관한 주석이나 설명을 입력하는 데에 사용된다. 사용자는 c 를 입력하여 섬네일 버퍼로부터 파일에 대해 주석을 남긴다. 사용자에게 주석을 입력하도록 요청할 것이다. 그러면 C-t c 를 입력하여 Dired (

image-dired-dired-comment-files

) 로부터 주석을 추가한다.


Image-Dired 는 간단한 이미지 조작 기능을 제공하기도 한다. 섬네일 버퍼에서 L 을 입력하면 원본 이미지를 반시계 방향으로 90도 회전하고, R 을 입력하면 시계 방향으로 90도 회전한다. 이러한 회전은 무손실로 이루어지며, JpegTRAN 이라는 외부 유틸리티를 사용한다.


기타 Dired 기능

명령어 + (

dired-create-directory

) 는 디렉터리명을 읽고 해당 디렉터리를 생성한다. 디렉터리가 이미 존재할 경우 오류를 보낸다.


M-s a C-s (

dired-do-isearch

) 는 마크된 파일에서 "다중 파일" 증분 검색을 시작한다. 검색이 파일 끝에서 실패할 경우 C-s 를 입력하면 다음 마크된 파일로 나아가 검색을 반복하고, 마지막으로 마크된 파일의 끝에서 검색이 처음으로 마크된 파일로 래핑(wrap around)된다. M-s a M-C-s (

dired-do-isearch-regexp

) 명령어는 정규 표현식 검색에서 이와 같이 실행한다. 검색 반복에 관한 정보는 91 페이지의 12.1.2절 [반복 Isearch]를 참고한다.


w (

dired-copy-filename-as-kill

) 명령어는 마크된 (또는 다음 n 개) 파일의 이름을 사용자가 마치 C-w 를 이용하여 제거한 것처럼 킬 링으로 놓는다. 이름은 공백으로 구분된다.


접두 인자가 0 이면 이 명령어는 마크된 파일마다 절대 파일명을 사용한다. C-u 를 접두 인자로 사용하면 Dired 버퍼의 기본 디렉터리에 대한 상대 파일명을 사용한다. (하위디렉터리에 있을 경우 여전히 슬래시를 포함할 수 있다.) 특별한 경우인데, 포인트가 디렉터리 제목 행에 있을 경우 w 를 입력하면 해당 디렉터리의 절대 이름을 제공한다. 이런 경우 어떠한 접두 인자 또는 마크된 파일도 무시된다.


이 명령어를 사용하는 주요 목적은 사용자가 파일명을 다른 Emacs 명령어에 대한 인자로 붙여 넣을 수 있도록 하기 위함이다. 이 명령어는 킬 링에 추가한 내용을 표시하기도 하므로 현재 마크된 파일 목록을 에코 영역에 표시할 때에도 사용할 수 있다.


( (

dired-hide-details-mode

) 명령어는 소유자나 파일 권한과 같은 세부 사항을 현재 Dired 버퍼에서 표시할 것인지를 토글한다. 기본적으로는 심볼릭 링크의 대상, 제목 행과 파일/디렉터리 목록을 제외한 모든 행은 숨긴다. 이를 변경하려면 옵션

dired-hide-details-hide-symlink-targets

dired-hide-details-hide-information-lines

를 각각 맞춤화한다.


사용자가 방문하는 디렉터리가 버전 제어 하에 있을 경우 (281 페이지의 25.1절 [버전 제어] 참고) 일반 VC diff 와 로그 명령어가 선택된 파일에서 작동할 것이다.


M-x dired-compare-directories 명령어는 현재 Dired 버퍼를 다른 디렉터리와 비교할 때 사용된다. 그것은 두 디렉터리 간에 "다른" 파일을 모두 마크한다. 이 명령어는 현재 버퍼를 포함하면서 이러한 파일들이 열거된 Dired 버퍼에 마크들을 놓는다.


기본 비교 방법은 (프롬프트에 RET 을 입력 시 사용됨) 파일명만 비교하는 방법으로, 다른 디렉터리에 나타나지 않는 각 파일명은 "다르다" 고 볼 수 있다. Lisp 표현식을 입력하면 좀 더 설득력 있는 비교를 명시할 수 있는데, 각 파일 크기는 변수

size1

size2

, 초로 나타낸 마지막 수정 일자는

mtime1

mtime2

, 각 파일 속성 목록은

fa1

fa2

(

file-attributes

함수가 반환한)로 나타낼 수 있다. 이 표현식은 비슷하게 명명된 한 쌍의 파일마다 평가되고, 표현식 값이

nil

이 아닌 경우 그러한 파일들은 "다른" 것으로 간주된다.


예를 들어 시퀀스 M-x dired-compare-directories RET (

> mtimel mtime2

) RET 은 다른 디렉터리에 비해 이 디렉터리에서 새로운 파일을 마크하고, 이 디렉터리보다는 다른 디렉터리에서 오래된 파일을 마크한다. 또한 보통대로 두 개의 디렉터리에서 상응하는 파일(counterpart)이 없는 파일을 마크하기도 한다.


X Window System 에서 Emacs 는 "드래그 앤 드롭" 프로토콜을 지원한다. 따라서 사용자는 다른 프로그램의 파일 객체를 드래그하여 Dired 버퍼로 드롭할 수 있는데, 그러면 해당 디렉터리에 파일로의 링크를 이동, 복사 또는 생성할 수 있다. 정확히 어떠한 액션을 취하는지는 시작되는 (originating) 프로그램에 따라 좌우된다. Dired 버퍼로부터 파일 드래그는 현재 지원되지 않는다.


Notes