]> code.delx.au - gnu-emacs/blob - man/dired.texi
#
[gnu-emacs] / man / dired.texi
1 @c This is part of the Emacs manual.
2 @c Copyright (C) 1985, 86, 87, 93, 94, 95, 1997 Free Software Foundation, Inc.
3 @c See file emacs.texi for copying conditions.
4 @node Dired, Calendar/Diary, Rmail, Top
5 @chapter Dired, the Directory Editor
6 @cindex Dired
7
8 Dired makes an Emacs buffer containing a listing of a directory, and
9 optionally some of its subdirectories as well. You can use the normal
10 Emacs commands to move around in this buffer, and special Dired commands
11 to operate on the files listed.
12
13 @menu
14 * Enter: Dired Enter. How to invoke Dired.
15 * Commands: Dired Commands. Commands in the Dired buffer.
16 * Deletion: Dired Deletion. Deleting files with Dired.
17 * Flagging Many Files:: Flagging files based on their names.
18 * Visit: Dired Visiting. Other file operations through Dired.
19 * Marks vs Flags:: Flagging for deletion vs marking.
20 * Operating on Files:: How to copy, rename, print, compress, etc.
21 either one file or several files.
22 * Shell Commands in Dired:: Running a shell command on the marked files.
23 * Transforming File Names:: Using patterns to rename multiple files.
24 * Comparison in Dired:: Running `diff' by way of Dired.
25 * Subdirectories in Dired:: Adding subdirectories to the Dired buffer.
26 * Subdirectory Motion:: Moving across subdirectories, and up and down.
27 * Hiding Subdirectories:: Making subdirectories visible or invisible.
28 * Updating: Dired Updating. Discarding lines for files of no interest.
29 * Find: Dired and Find. Using `find' to choose the files for Dired.
30 @end menu
31
32 @node Dired Enter
33 @section Entering Dired
34
35 @findex dired
36 @kindex C-x d
37 @vindex dired-listing-switches
38 To invoke Dired, do @kbd{C-x d} or @kbd{M-x dired}. The command reads
39 a directory name or wildcard file name pattern as a minibuffer argument
40 to specify which files to list. Where @code{dired} differs from
41 @code{list-directory} is in putting the buffer into Dired mode so that
42 the special commands of Dired are available.
43
44 The variable @code{dired-listing-switches} specifies the options to
45 give to @code{ls} for listing directory; this string @emph{must} contain
46 @samp{-l}. If you use a numeric prefix argument with the @code{dired}
47 command, you can specify the @code{ls} switches with the minibuffer
48 before you enter the directory specification.
49
50 @findex dired-other-window
51 @kindex C-x 4 d
52 @findex dired-other-frame
53 @kindex C-x 5 d
54 To display the Dired buffer in another window rather than in the
55 selected window, use @kbd{C-x 4 d} (@code{dired-other-window}) instead
56 of @kbd{C-x d}. @kbd{C-x 5 d} (@code{dired-other-frame}) uses a
57 separate frame to display the Dired buffer.
58
59 @node Dired Commands
60 @section Commands in the Dired Buffer
61
62 The Dired buffer is ``read-only,'' and inserting text in it is not
63 useful, so ordinary printing characters such as @kbd{d} and @kbd{x} are
64 used for special Dired commands. Some Dired commands @dfn{mark} or
65 @dfn{flag} the @dfn{current file} (that is, the file on the current
66 line); other commands operate on the marked files or on the flagged
67 files.
68
69 @kindex C-n @r{(Dired)}
70 @kindex C-p @r{(Dired)}
71 All the usual Emacs cursor motion commands are available in Dired
72 buffers. Some special-purpose cursor motion commands are also
73 provided. The keys @kbd{C-n} and @kbd{C-p} are redefined to put the
74 cursor at the beginning of the file name on the line, rather than at the
75 beginning of the line.
76
77 @kindex SPC @r{(Dired)}
78 For extra convenience, @key{SPC} and @kbd{n} in Dired are equivalent
79 to @kbd{C-n}. @kbd{p} is equivalent to @kbd{C-p}. (Moving by lines is
80 so common in Dired that it deserves to be easy to type.) @key{DEL}
81 (move up and unflag) is often useful simply for moving up.
82
83 @node Dired Deletion
84 @section Deleting Files with Dired
85 @cindex flagging files (in Dired)
86 @cindex deleting files (in Dired)
87
88 The primary use of Dired is to @dfn{flag} files for deletion and then
89 delete the files previously flagged.
90
91 @table @kbd
92 @item d
93 Flag this file for deletion.
94 @item u
95 Remove deletion flag on this line.
96 @item @key{DEL}
97 Move point to previous line and remove the deletion flag on that line.
98 @item x
99 Delete the files that are flagged for deletion.
100 @end table
101
102 @kindex d @r{(Dired)}
103 @findex dired-flag-file-deletion
104 You can flag a file for deletion by moving to the line describing the
105 file and typing @kbd{d} (@code{dired-flag-file-deletion}). The deletion flag is visible as a @samp{D} at
106 the beginning of the line. This command moves point to the next line,
107 so that repeated @kbd{d} commands flag successive files. A numeric
108 argument serves as a repeat count.
109
110 @kindex u @r{(Dired deletion)}
111 @kindex DEL @r{(Dired)}
112 The files are flagged for deletion rather than deleted immediately to
113 reduce the danger of deleting a file accidentally. Until you direct
114 Dired to expunge the flagged files, you can remove deletion flags using
115 the commands @kbd{u} and @key{DEL}. @kbd{u} (@code{dired-unmark}) works
116 just like @kbd{d}, but removes flags rather than making flags.
117 @key{DEL} (@code{dired-unmark-backward}) moves upward, removing flags;
118 it is like @kbd{u} with argument @minus{}1.
119
120 @kindex x @r{(Dired)}
121 @findex dired-expunge
122 @cindex expunging (Dired)
123 To delete the flagged files, type @kbd{x} (@code{dired-expunge}).
124 This command first displays a list of all the file names flagged for
125 deletion, and requests confirmation with @kbd{yes}. If you confirm,
126 Dired deletes the flagged files, then deletes their lines from the text
127 of the Dired buffer. The shortened Dired buffer remains selected.
128
129 If you answer @kbd{no} or quit with @kbd{C-g} when asked to confirm, you
130 return immediately to Dired, with the deletion flags still present in
131 the buffer, and no files actually deleted.
132
133 @node Flagging Many Files
134 @section Flagging Many Files at Once
135
136 @table @kbd
137 @item #
138 Flag all auto-save files (files whose names start and end with @samp{#})
139 for deletion (@pxref{Auto Save}).
140
141 @item ~
142 Flag all backup files (files whose names end with @samp{~}) for deletion
143 (@pxref{Backup}).
144
145 @item &
146 Flag for deletion all files with certain kinds of names, names that
147 suggest you could easily create the files again.
148
149 @item .@: @r{(Period)}
150 Flag excess numeric backup files for deletion. The oldest and newest
151 few backup files of any one file are exempt; the middle ones are
152 flagged.
153
154 @item % d @var{regexp} @key{RET}
155 Flag for deletion all files whose names match the regular expression
156 @var{regexp}.
157 @end table
158
159 The @kbd{#}, @kbd{~}, @kbd{&}, and @kbd{.} commands flag many files for
160 deletion, based on their file names. These commands are useful
161 precisely because they do not themselves delete any files; you can
162 remove the deletion flags from any flagged files that you really wish to
163 keep.@refill
164
165 @kindex & @r{(Dired)}
166 @findex dired-flag-garbage-files
167 @vindex dired-garbage-files-regexp
168 @kbd{&} (@code{dired-flag-garbage-files}) flags files whose names
169 match the regular expression specified by the variable
170 @code{dired-garbage-files-regexp}. By default, this matches certain
171 files produced by @TeX{}, and the @samp{.orig} and @samp{.rej} files
172 produced by @code{patch}.
173
174 @kindex # @r{(Dired)}
175 @kindex ~ @r{(Dired)}
176 @findex dired-flag-auto-save-files
177 @findex dired-flag-backup-files
178 @kbd{#} (@code{dired-flag-auto-save-files}) flags for deletion all
179 files whose names look like auto-save files (@pxref{Auto Save})---that
180 is, files whose names begin and end with @samp{#}. @kbd{~}
181 (@code{dired-flag-backup-files}) flags for deletion all files whose
182 names say they are backup files (@pxref{Backup})---that is, whose names
183 end in @samp{~}.
184
185 @kindex . @r{(Dired)}
186 @vindex dired-kept-versions
187 @findex dired-clean-directory
188 @kbd{.} (period, @code{dired-clean-directory}) flags just some of the
189 backup files for deletion: all but the oldest few and newest few backups
190 of any one file. Normally @code{dired-kept-versions} (@strong{not}
191 @code{kept-new-versions}; that applies only when saving) specifies the
192 number of newest versions of each file to keep, and
193 @code{kept-old-versions} specifies the number of oldest versions to
194 keep.
195
196 Period with a positive numeric argument, as in @kbd{C-u 3 .},
197 specifies the number of newest versions to keep, overriding
198 @code{dired-kept-versions}. A negative numeric argument overrides
199 @code{kept-old-versions}, using minus the value of the argument to
200 specify the number of oldest versions of each file to keep.
201
202 @findex dired-flag-files-regexp
203 @kindex % d @r{(Dired)}
204 The @kbd{% d} command flags all files whose names match a specified
205 regular expression (@code{dired-flag-files-regexp}). Only the
206 non-directory part of the file name is used in matching. You can use
207 @samp{^} and @samp{$} to anchor matches. You can exclude subdirectories
208 by hiding them (@pxref{Hiding Subdirectories}).
209
210 @node Dired Visiting
211 @section Visiting Files in Dired
212
213 There are several Dired commands for visiting or examining the files
214 listed in the Dired buffer. All of them apply to the current line's
215 file; if that file is really a directory, these commands invoke Dired on
216 that subdirectory (making a separate Dired buffer).
217
218 @table @kbd
219 @item f
220 @kindex f @r{(Dired)}
221 @findex dired-find-file
222 Visit the file described on the current line, like typing @kbd{C-x C-f}
223 and supplying that file name (@code{dired-find-file}). @xref{Visiting}.
224
225 @item @key{RET}
226 @kindex RET @r{(Dired)}
227 Equivalent to @kbd{f}.
228
229 @item o
230 @kindex o @r{(Dired)}
231 @findex dired-find-file-other-window
232 Like @kbd{f}, but uses another window to display the file's buffer
233 (@code{dired-find-file-other-window}). The Dired buffer remains visible
234 in the first window. This is like using @kbd{C-x 4 C-f} to visit the
235 file. @xref{Windows}.
236
237 @item C-o
238 @kindex C-o @r{(Dired)}
239 @findex dired-display-file
240 Visit the file described on the current line, and display the buffer in
241 another window, but do not select that window (@code{dired-display-file}).
242
243 @item Mouse-2
244 @findex dired-mouse-find-file-other-window
245 Visit the file named by the line you click on
246 (@code{dired-mouse-find-file-other-window}). This uses another window
247 to display the file, like the @kbd{o} command.
248
249 @item v
250 @kindex v @r{(Dired)}
251 @findex dired-view-file
252 View the file described on the current line, using @kbd{M-x view-file}
253 (@code{dired-view-file}).
254
255 Viewing a file is like visiting it, but is slanted toward moving around
256 in the file conveniently and does not allow changing the file.
257 @xref{Misc File Ops,View File}.
258 @end table
259
260 @node Marks vs Flags
261 @section Dired Marks vs. Flags
262
263 @cindex marking in Dired
264 Instead of flagging a file with @samp{D}, you can @dfn{mark} the file
265 with some other character (usually @samp{*}). Most Dired commands to
266 operate on files, aside from ``expunge'' (@kbd{x}), look for files
267 marked with @samp{*}.
268
269 Here are some commands for marking with @samp{*}, or for unmarking or
270 operating on marks. (@xref{Dired Deletion}, for commands to flag and
271 unflag files.)
272
273 @table @kbd
274 @item m
275 @itemx * m
276 @kindex m @r{(Dired)}
277 @kindex * m @r{(Dired)}
278 @findex dired-mark
279 Mark the current file with @samp{*} (@code{dired-mark}). With a numeric
280 argument @var{n}, mark the next @var{n} files starting with the current
281 file. (If @var{n} is negative, mark the previous @minus{}@var{n}
282 files.)
283
284 @item * *
285 @kindex * * @r{(Dired)}
286 @findex dired-mark-executables
287 Mark all executable files with @samp{*}
288 (@code{dired-mark-executables}). With a numeric argument, unmark all
289 those files.
290
291 @item * @@
292 @kindex * @@ @r{(Dired)}
293 @findex dired-mark-symlinks
294 Mark all symbolic links with @samp{*} (@code{dired-mark-symlinks}).
295 With a numeric argument, unmark all those files.
296
297 @item * /
298 @kindex * / @r{(Dired)}
299 @findex dired-mark-directories
300 Mark with @samp{*} all files which are actually directories, except for
301 @file{.} and @file{..} (@code{dired-mark-directories}). With a numeric
302 argument, unmark all those files.
303
304 @item * s
305 @kindex * s @r{(Dired)}
306 @findex dired-mark-subdir-files
307 Mark all the files in the current subdirectory, aside from @file{.}
308 and @file{..} (@code{dired-mark-subdir-files}).
309
310 @item u
311 @itemx * u
312 @kindex u @r{(Dired)}
313 @kindex * u @r{(Dired)}
314 @findex dired-unmark
315 Remove any mark on this line (@code{dired-unmark}).
316
317 @item @key{DEL}
318 @itemx * @key{DEL}
319 @kindex * DEL @r{(Dired)}
320 @findex dired-unmark-backward
321 Move point to previous line and remove any mark on that line
322 (@code{dired-unmark-backward}).
323
324 @item * !
325 @kindex * ! @r{(Dired)}
326 @findex dired-unmark-all-files-no-query
327 Remove all marks from all the files in this Dired buffer
328 (@code{dired-unmark-all-files-no-query}).
329
330 @item * ? @var{markchar}
331 @kindex * ? @r{(Dired)}
332 @findex dired-unmark-all-files
333 Remove all marks that use the character @var{markchar}
334 (@code{dired-unmark-all-files}). The argument is a single
335 character---do not use @key{RET} to terminate it.
336
337 With a numeric argument, this command queries about each marked file,
338 asking whether to remove its mark. You can answer @kbd{y} meaning yes,
339 @kbd{n} meaning no, or @kbd{!} to remove the marks from the remaining
340 files without asking about them.
341
342 @item * C-n
343 @findex dired-next-marked-file
344 @kindex * C-n @r{(Dired)}
345 Move down to the next marked file (@code{dired-next-marked-file})
346 A file is ``marked'' if it has any kind of mark.
347
348 @item * C-p
349 @findex dired-prev-marked-file
350 @kindex * C-p @r{(Dired)}
351 Move up to the previous marked file (@code{dired-prev-marked-file})
352
353 @item * t
354 @kindex * t @r{(Dired)}
355 @findex dired-do-toggle
356 Toggle all marks (@code{dired-do-toggle}): files marked with @samp{*}
357 become unmarked, and unmarked files are marked with @samp{*}. Files
358 marked in any other way are not affected.
359
360 @item * c @var{old} @var{new}
361 @kindex * c @r{(Dired)}
362 @findex dired-change-marks
363 Replace all marks that use the character @var{old} with marks that use
364 the character @var{new} (@code{dired-change-marks}). This command is
365 the primary way to create or use marks other than @samp{*} or @samp{D}.
366 The arguments are single characters---do not use @key{RET} to terminate
367 them.
368
369 You can use almost any character as a mark character by means of this
370 command, to distinguish various classes of files. If @var{old} is a
371 space (@samp{ }), then the command operates on all unmarked files; if
372 @var{new} is a space, then the command unmarks the files it acts on.
373
374 To illustrate the power of this command, here is how to put @samp{D}
375 flags on all the files that have no marks, while unflagging all those
376 that already have @samp{D} flags:
377
378 @example
379 * c D t * c SPC D * c t SPC
380 @end example
381
382 This assumes that no files are marked with @samp{t}.
383
384 @item % m @var{regexp} @key{RET}
385 @itemx * % @var{regexp} @key{RET}
386 @findex dired-mark-files-regexp
387 @kindex % m @r{(Dired)}
388 @kindex * % @r{(Dired)}
389 Mark (with @samp{*}) all files whose names match the regular expression
390 @var{regexp} (@code{dired-mark-files-regexp}). This command is like
391 @kbd{% d}, except that it marks files with @samp{*} instead of flagging
392 with @samp{D}. @xref{Flagging Many Files}.
393
394 Only the non-directory part of the file name is used in matching. Use
395 @samp{^} and @samp{$} to anchor matches. Exclude subdirectories by
396 hiding them (@pxref{Hiding Subdirectories}).
397
398 @item % g @var{regexp} @key{RET}
399 @findex dired-mark-files-containing-regexp
400 @kindex % m @r{(Dired)}
401 Mark (with @samp{*}) all files whose @emph{contents} contain a match for
402 the regular expression @var{regexp}
403 (@code{dired-mark-files-containing-regexp}). This command is like
404 @kbd{% m}, except that it searches the file contents instead of the file
405 name.
406
407 @item C-_
408 @kindex C-_ @r{(Dired)}
409 @findex dired-undo
410 Undo changes in the Dired buffer, such as adding or removing
411 marks (@code{dired-undo}).
412 @end table
413
414 @node Operating on Files
415 @section Operating on Files
416 @cindex operating on files in Dired
417
418 This section describes the basic Dired commands to operate on one file
419 or several files. All of these commands are capital letters; all of
420 them use the minibuffer, either to read an argument or to ask for
421 confirmation, before they act. All of them give you several ways to
422 specify which files to manipulate:
423
424 @itemize @bullet
425 @item
426 If you give the command a numeric prefix argument @var{n}, it operates
427 on the next @var{n} files, starting with the current file. (If @var{n}
428 is negative, the command operates on the @minus{}@var{n} files preceding
429 the current line.)
430
431 @item
432 Otherwise, if some files are marked with @samp{*}, the command operates
433 on all those files.
434
435 @item
436 Otherwise, the command operates on the current file only.
437 @end itemize
438
439 Here are the file-manipulating commands that operate on files in this
440 way. (Some other Dired commands, such as @kbd{!} and the @samp{%}
441 commands, also use these conventions to decide which files to work on.)
442
443 @table @kbd
444 @findex dired-do-copy
445 @kindex C @r{(Dired)}
446 @item C @var{new} @key{RET}
447 Copy the specified files (@code{dired-do-copy}). The argument @var{new}
448 is the directory to copy into, or (if copying a single file) the new
449 name.
450
451 @vindex dired-copy-preserve-time
452 If @code{dired-copy-preserve-time} is non-@code{nil}, then copying with
453 this command sets the modification time of the new file to be the same
454 as that of the old file.
455
456 @item D
457 @findex dired-do-delete
458 @kindex D @r{(Dired)}
459 Delete the specified files (@code{dired-do-delete}). Like the other
460 commands in this section, this command operates on the @emph{marked}
461 files, or the next @var{n} files. By contrast, @kbd{x}
462 (@code{dired-expunge}) deletes all @dfn{flagged} files.
463
464 @findex dired-do-rename
465 @kindex R @r{(Dired)}
466 @item R @var{new} @key{RET}
467 Rename the specified files (@code{dired-do-rename}). The argument
468 @var{new} is the directory to rename into, or (if renaming a single
469 file) the new name.
470
471 Dired automatically changes the visited file name of buffers associated
472 with renamed files so that they refer to the new names.
473
474 @findex dired-do-hardlink
475 @kindex H @r{(Dired)}
476 @item H @var{new} @key{RET}
477 Make hard links to the specified files (@code{dired-do-hardlink}). The
478 argument @var{new} is the directory to make the links in, or (if making
479 just one link) the name to give the link.
480
481 @findex dired-do-symlink
482 @kindex S @r{(Dired)}
483 @item S @var{new} @key{RET}
484 Make symbolic links to the specified files (@code{dired-do-symlink}).
485 The argument @var{new} is the directory to make the links in, or (if
486 making just one link) the name to give the link.
487
488 @findex dired-do-chmod
489 @kindex M @r{(Dired)}
490 @item M @var{modespec} @key{RET}
491 Change the mode (also called ``permission bits'') of the specified files
492 (@code{dired-do-chmod}). This uses the @code{chmod} program, so
493 @var{modespec} can be any argument that @code{chmod} can handle.
494
495 @findex dired-do-chgrp
496 @kindex G @r{(Dired)}
497 @item G @var{newgroup} @key{RET}
498 Change the group of the specified files to @var{newgroup}
499 (@code{dired-do-chgrp}).
500
501 @findex dired-do-chown
502 @kindex O @r{(Dired)}
503 @item O @var{newowner} @key{RET}
504 Change the owner of the specified files to @var{newowner}
505 (@code{dired-do-chown}). (On most systems, only the superuser can do
506 this.)
507
508 @vindex dired-chown-program
509 The variable @code{dired-chown-program} specifies the name of the
510 program to use to do the work (different systems put @code{chown} in
511 different places).
512
513 @findex dired-do-print
514 @kindex P @r{(Dired)}
515 @item P @var{command} @key{RET}
516 Print the specified files (@code{dired-do-print}). You must specify the
517 command to print them with, but the minibuffer starts out with a
518 suitable guess made using the variables @code{lpr-command} and
519 @code{lpr-switches} (the same variables that @code{lpr-buffer} uses;
520 @pxref{Hardcopy}).
521
522 @findex dired-do-compress
523 @kindex Z @r{(Dired)}
524 @item Z
525 Compress the specified files (@code{dired-do-compress}). If the file
526 appears to be a compressed file already, it is uncompressed instead.
527
528 @findex dired-do-load
529 @kindex L @r{(Dired)}
530 @item L
531 Load the specified Emacs Lisp files (@code{dired-do-load}).
532 @xref{Lisp Libraries}.
533
534 @findex dired-do-byte-compile
535 @kindex B @r{(Dired)}
536 @item B
537 Byte compile the specified Emacs Lisp files
538 (@code{dired-do-byte-compile}). @xref{Byte Compilation,, Byte
539 Compilation, elisp, The Emacs Lisp Reference Manual}.
540
541 @kindex A @r{(Dired)}
542 @findex dired-do-search
543 @item A @var{regexp} @key{RET}
544 Search all the specified files for the regular expression @var{regexp}
545 (@code{dired-do-search}).
546
547 This command is a variant of @code{tags-search}. The search stops at
548 the first match it finds; use @kbd{M-,} to resume the search and find
549 the next match. @xref{Tags Search}.
550
551 @kindex Q @r{(Dired)}
552 @findex dired-do-query-replace
553 @item Q @var{from} @key{RET} @var{to} @key{RET}
554 Perform @code{query-replace-regexp} on each of the specified files,
555 replacing matches for @var{from} (a regular expression) with the string
556 @var{to} (@code{dired-do-query-replace}).
557
558 This command is a variant of @code{tags-query-replace}. If you exit the
559 query replace loop, you can use @kbd{M-,} to resume the scan and replace
560 more matches. @xref{Tags Search}.
561 @end table
562
563 @kindex + @r{(Dired)}
564 @findex dired-create-directory
565 One special file-operation command is @kbd{+}
566 (@code{dired-create-directory}). This command reads a directory name and
567 creates the directory if it does not already exist.
568
569 @node Shell Commands in Dired
570 @section Shell Commands in Dired
571 @cindex shell commands, Dired
572
573 @findex dired-do-shell-command
574 @kindex ! @r{(Dired)}
575 The dired command @kbd{!} (@code{dired-do-shell-command}) reads a shell
576 command string in the minibuffer and runs that shell command on all the
577 specified files. You can specify the files to operate on in the usual
578 ways for Dired commands (@pxref{Operating on Files}). There are two
579 ways of applying a shell command to multiple files:
580
581 @itemize @bullet
582 @item
583 If you use @samp{*} in the shell command, then it runs just once, with
584 the list of file names substituted for the @samp{*}. The order of file
585 names is the order of appearance in the Dired buffer.
586
587 Thus, @kbd{! tar cf foo.tar * @key{RET}} runs @code{tar} on the entire
588 list of file names, putting them into one tar file @file{foo.tar}.
589
590 @item
591 If the command string doesn't contain @samp{*}, then it runs once
592 @emph{for each file}, with the file name added at the end.
593
594 For example, @kbd{! uudecode @key{RET}} runs @code{uudecode} on each
595 file.
596 @end itemize
597
598 What if you want to run the shell command once for each file but with
599 the file name inserted in the middle? Or if you want to use the file
600 names in a more complicated fashion? Use a shell loop. For example,
601 this shell command would run @code{uuencode} on each of the specified
602 files, writing the output into a corresponding @file{.uu} file:
603
604 @example
605 for file in *; do uuencode $file $file >$file.uu; done
606 @end example
607
608 The working directory for the shell command is the top-level directory
609 of the Dired buffer.
610
611 The @kbd{!} command does not attempt to update the Dired buffer to show
612 new or modified files, because it doesn't really understand shell
613 commands, and does not know what files the shell command changed. Use
614 the @kbd{g} command to update the Dired buffer (@pxref{Dired
615 Updating}).
616
617 @node Transforming File Names
618 @section Transforming File Names in Dired
619
620 Here are commands that alter file names in a systematic way:
621
622 @table @kbd
623 @findex dired-upcase
624 @kindex % u @r{(Dired)}
625 @item % u
626 Rename each of the selected files to an upper-case name
627 (@code{dired-upcase}). If the old file names are @file{Foo}
628 and @file{bar}, the new names are @file{FOO} and @file{BAR}.
629
630 @item % l
631 @findex dired-downcase
632 @kindex % l @r{(Dired)}
633 Rename each of the selected files to a lower-case name
634 (@code{dired-downcase}). If the old file names are @file{Foo} and
635 @file{bar}, the new names are @file{foo} and @file{bar}.
636
637 @item % R @var{from} @key{RET} @var{to} @key{RET}
638 @kindex % R @r{(Dired)}
639 @findex dired-do-rename-regexp
640 @itemx % C @var{from} @key{RET} @var{to} @key{RET}
641 @kindex % C @r{(Dired)}
642 @findex dired-do-copy-regexp
643 @itemx % H @var{from} @key{RET} @var{to} @key{RET}
644 @kindex % H @r{(Dired)}
645 @findex dired-do-hardlink-regexp
646 @itemx % S @var{from} @key{RET} @var{to} @key{RET}
647 @kindex % S @r{(Dired)}
648 @findex dired-do-symlink-regexp
649 These four commands rename, copy, make hard links and make soft links,
650 in each case computing the new name by regular-expression substitution
651 from the name of the old file.
652 @end table
653
654 The four regular-expression substitution commands effectively perform
655 a search-and-replace on the selected file names in the Dired buffer.
656 They read two arguments: a regular expression @var{from}, and a
657 substitution pattern @var{to}.
658
659 The commands match each ``old'' file name against the regular
660 expression @var{from}, and then replace the matching part with @var{to}.
661 You can use @samp{\&} and @samp{\@var{digit}} in @var{to} to refer to
662 all or part of what the pattern matched in the old file name, as in
663 @code{replace-regexp} (@pxref{Regexp Replace}). If the regular expression
664 matches more than once in a file name, only the first match is replaced.
665
666 For example, @kbd{% R ^.*$ @key{RET} x-\& @key{RET}} renames each
667 selected file by prepending @samp{x-} to its name. The inverse of this,
668 removing @samp{x-} from the front of each file name, is also possible:
669 one method is @kbd{% R ^x-\(.*\)$ @key{RET} \1 @key{RET}}; another is
670 @kbd{% R ^x- @key{RET} @key{RET}}. (Use @samp{^} and @samp{$} to anchor
671 matches that should span the whole filename.)
672
673 Normally, the replacement process does not consider the files'
674 directory names; it operates on the file name within the directory. If
675 you specify a numeric argument of zero, then replacement affects the
676 entire absolute file name including directory name.
677
678 Often you will want to select the set of files to operate on using the
679 same @var{regexp} that you will use to operate on them. To do this,
680 mark those files with @kbd{% m @var{regexp} @key{RET}}, then use the
681 same regular expression in the command to operate on the files. To make
682 this easier, the @kbd{%} commands to operate on files use the last
683 regular expression specified in any @kbd{%} command as a default.
684
685 @node Comparison in Dired
686 @section File Comparison with Dired
687
688 Here are two Dired commands that compare specified files using
689 @code{diff}.
690
691 @table @kbd
692 @item =
693 @findex dired-diff
694 @kindex = @r{(Dired)}
695 Compare the current file (the file at point) with another file (the file
696 at the mark) using the @code{diff} program (@code{dired-diff}). The
697 file at the mark is the first argument of @code{diff}, and the file at
698 point is the second argument.
699
700 @findex dired-backup-diff
701 @kindex M-= @r{(Dired)}
702 @item M-=
703 Compare the current file with its latest backup file
704 (@code{dired-backup-diff}). If the current file is itself a backup,
705 compare it with the file it is a backup of; this way, you can compare
706 a file with any backup version of your choice.
707
708 The backup file is the first file given to @code{diff}.
709 @end table
710
711 @node Subdirectories in Dired
712 @section Subdirectories in Dired
713 @cindex subdirectories in Dired
714 @cindex expanding subdirectories in Dired
715
716 A Dired buffer displays just one directory in the normal case;
717 but you can optionally include its subdirectories as well.
718
719 The simplest way to include multiple directories in one Dired buffer is
720 to specify the options @samp{-lR} for running @code{ls}. (If you give a
721 numeric argument when you run Dired, then you can specify these options
722 in the minibuffer.) That produces a recursive directory listing showing
723 all subdirectories at all levels.
724
725 But usually all the subdirectories are too many; usually you will
726 prefer to include specific subdirectories only. You can do this with
727 the @kbd{i} command:
728
729 @table @kbd
730 @findex dired-maybe-insert-subdir
731 @kindex i @r{(Dired)}
732 @item i
733 @cindex inserted subdirectory (Dired)
734 @cindex in-situ subdirectory (Dired)
735 Insert the contents of a subdirectory later in the buffer.
736 @end table
737
738 Use the @kbd{i} (@code{dired-maybe-insert-subdir}) command on a line
739 that describes a file which is a directory. It inserts the contents of
740 that directory into the same Dired buffer, and moves there. Inserted
741 subdirectory contents follow the top-level directory of the Dired
742 buffer, just as they do in @samp{ls -lR} output.
743
744 If the subdirectory's contents are already present in the buffer, the
745 @kbd{i} command just moves to it.
746
747 In either case, @kbd{i} sets the Emacs mark before moving, so @kbd{C-u
748 C-@key{SPC}} takes you back to the old position in the buffer (the line
749 describing that subdirectory).
750
751 Use the @kbd{l} command (@code{dired-do-redisplay}) to update the
752 subdirectory's contents. Use @kbd{k} to delete the subdirectory.
753 @xref{Dired Updating}.
754
755 @node Subdirectory Motion
756 @section Moving Over Subdirectories
757
758 When a Dired buffer lists subdirectories, you can use the page motion
759 commands @kbd{C-x [} and @kbd{C-x ]} to move by entire directories.
760
761 @cindex header line (Dired)
762 @cindex directory header lines
763 The following commands move across, up and down in the tree of
764 directories within one Dired buffer. They move to @dfn{directory header
765 lines}, which are the lines that give a directory's name, at the
766 beginning of the directory's contents.
767
768 @table @kbd
769 @findex dired-next-subdir
770 @kindex C-M-n @r{(Dired)}
771 @item C-M-n
772 Go to next subdirectory header line, regardless of level
773 (@code{dired-next-subdir}).
774
775 @findex dired-prev-subdir
776 @kindex C-M-p @r{(Dired)}
777 @item C-M-p
778 Go to previous subdirectory header line, regardless of level
779 (@code{dired-prev-subdir}).
780
781 @findex dired-tree-up
782 @kindex C-M-u @r{(Dired)}
783 @item C-M-u
784 Go up to the parent directory's header line (@code{dired-tree-up}).
785
786 @findex dired-tree-down
787 @kindex C-M-d @r{(Dired)}
788 @item C-M-d
789 Go down in the directory tree, to the first subdirectory's header line
790 (@code{dired-tree-down}).
791
792 @findex dired-prev-dirline
793 @kindex < @r{(Dired)}
794 @item <
795 Move up to the previous directory-file line (@code{dired-prev-dirline}).
796 These lines are the ones that describe a directory as a file in its
797 parent directory.
798
799 @findex dired-next-dirline
800 @kindex > @r{(Dired)}
801 @item >
802 Move down to the next directory-file line (@code{dired-prev-dirline}).
803 @end table
804
805 @node Hiding Subdirectories
806 @section Hiding Subdirectories
807
808 @cindex hiding in Dired (Dired)
809 @dfn{Hiding} a subdirectory means to make it invisible, except for its
810 header line, via selective display (@pxref{Selective Display}).
811
812 @table @kbd
813 @item $
814 @findex dired-hide-subdir
815 @kindex $ @r{(Dired)}
816 Hide or reveal the subdirectory that point is in, and move point to the
817 next subdirectory (@code{dired-hide-subdir}). A numeric argument serves
818 as a repeat count.
819
820 @item M-$
821 @findex dired-hide-all
822 @kindex M-$ @r{(Dired)}
823 Hide all subdirectories in this Dired buffer, leaving only their header
824 lines (@code{dired-hide-all}). Or, if any subdirectory is currently
825 hidden, make all subdirectories visible again. You can use this command
826 to get an overview in very deep directory trees or to move quickly to
827 subdirectories far away.
828 @end table
829
830 Ordinary Dired commands never consider files inside a hidden
831 subdirectory. For example, the commands to operate on marked files
832 ignore files in hidden directories even if they are marked. Thus you
833 can use hiding to temporarily exclude subdirectories from operations
834 without having to remove the markers.
835
836 The subdirectory hiding commands toggle; that is, they hide what was
837 visible, and show what was hidden.
838
839 @node Dired Updating
840 @section Updating the Dired Buffer
841
842 This section describes commands to update the Dired buffer to reflect
843 outside (non-Dired) changes in the directories and files, and to delete
844 part of the Dired buffer.
845
846 @table @kbd
847 @item g
848 Update the entire contents of the Dired buffer (@code{revert-buffer}).
849
850 @item l
851 Update the specified files (@code{dired-do-redisplay}).
852
853 @item k
854 Delete the specified @emph{file lines}---not the files, just the lines
855 (@code{dired-do-kill-lines}).
856
857 @item s
858 Toggle between alphabetical order and date/time order
859 (@code{dired-sort-toggle-or-edit}).
860
861 @item C-u s @var{switches} @key{RET}
862 Refresh the Dired buffer using @var{switches} as
863 @code{dired-listing-switches}.
864 @end table
865
866 @kindex g @r{(Dired)}
867 @findex revert-buffer @r{(Dired)}
868 Type @kbd{g} (@code{revert-buffer}) to update the contents of the
869 Dired buffer, based on changes in the files and directories listed.
870 This preserves all marks except for those on files that have vanished.
871 Hidden subdirectories are updated but remain hidden.
872
873 @kindex l @r{(Dired)}
874 @findex dired-do-redisplay
875 To update only some of the files, type @kbd{l}
876 (@code{dired-do-redisplay}). This command applies to the next @var{n}
877 files, or to the marked files if any, or to the current file. Updating
878 them means reading their current status from the file system and
879 changing the buffer to reflect it properly.
880
881 If you use @kbd{l} on a subdirectory header line, it updates the
882 contents of the corresponding subdirectory.
883
884 @kindex k @r{(Dired)}
885 @findex dired-do-kill-lines
886 To delete the specified @emph{file lines}---not the files, just the
887 lines---type @kbd{k} (@code{dired-do-kill-lines}). With a numeric
888 argument @var{n}, this command applies to the next @var{n} files;
889 otherwise, it applies to the marked files.
890
891 If you kill the line for a file that is a directory, the directory's
892 contents are also deleted from the buffer. Typing @kbd{C-u k} on the
893 header line for a subdirectory is another way to delete a subdirectory
894 from the Dired buffer.
895
896 The @kbd{g} command brings back any individual lines that you have
897 killed in this way, but not subdirectories---you must use @kbd{i} to
898 reinsert each subdirectory.
899
900 @cindex Dired sorting
901 @cindex sorting Dired buffer
902 @kindex s @r{(Dired)}
903 @findex dired-sort-toggle-or-edit
904 The files in a Dired buffers are normally listed in alphabetical order
905 by file names. Alternatively Dired can sort them by date/time. The
906 Dired command @kbd{s} (@code{dired-sort-toggle-or-edit}) switches
907 between these two sorting modes. The mode line in a Dired buffer
908 indicates which way it is currently sorted---by name, or by date.
909
910 @kbd{C-u s @var{switches} @key{RET}} lets you specify a new value for
911 @code{dired-listing-switches}.
912
913 @node Dired and Find
914 @section Dired and @code{find}
915 @cindex @code{find} and Dired
916
917 You can select a set of files for display in a Dired buffer more
918 flexibly by using the @code{find} utility to choose the files.
919
920 @findex find-name-dired
921 To search for files with names matching a wildcard pattern use
922 @kbd{M-x find-name-dired}. It reads arguments @var{directory} and
923 @var{pattern}, and chooses all the files in @var{directory} or its
924 subdirectories whose individual names match @var{pattern}.
925
926 The files thus chosen are displayed in a Dired buffer in which the
927 ordinary Dired commands are available.
928
929 @findex find-grep-dired
930 If you want to test the contents of files, rather than their names,
931 use @kbd{M-x find-grep-dired}. This command reads two minibuffer
932 arguments, @var{directory} and @var{regexp}; it chooses all the files in
933 @var{directory} or its subdirectories that contain a match for
934 @var{regexp}. It works by running the programs @code{find} and
935 @code{grep}. See also @kbd{M-x grep-find}, in @ref{Compilation}.
936 Remember to write the regular expression for @code{grep}, not for Emacs.
937
938 @findex find-dired
939 The most general command in this series is @kbd{M-x find-dired}, which
940 lets you specify any condition that @code{find} can test. It takes two
941 minibuffer arguments, @var{directory} and @var{find-args}; it runs
942 @code{find} in @var{directory}, passing @var{find-args} to tell
943 @code{find} what condition to test. To use this command, you need to
944 know how to use @code{find}.
945
946 @vindex find-ls-option
947 The format of listing produced by these commands is controlled by the
948 variable @code{find-ls-option}, whose default value specifies using
949 options @samp{-ld} for @code{ls}. If your listings are corrupted, you
950 may need to change the value of this variable.