Based upon the name of a file, Dired tries to guess what shell command you might want to apply to it. For example, if you have point on a file named foo.tar and you press !, Dired will guess you want to ‘tar xvf’ it and suggest that as the default shell command.
The default is mentioned in brackets and you can type M-n to get the default into the minibuffer and then edit it, e.g., to change ‘tar xvf’ to ‘tar tvf’. If there are several commands for a given file, e.g., ‘xtex’ and ‘dvips’ for a .dvi file, you can type M-n several times to see each of the matching commands.
Dired only tries to guess a command for a single file, never for a list of marked files.
The following variables control guessing of shell commands:
This variable specifies the predefined rules for guessing shell
commands suitable for certain files. Set this to
nil to turn
guessing off. The elements of
(defined by the user) will override these rules.
nil, this variables specifies the user-defined alist of
file regexps and their suggested commands. These rules take
precedence over the predefined rules in the variable
dired-guess-shell-alist-default (to which they are prepended)
dired-do-shell-command is run). The default is
Each element of the alist looks like
where each command can either be a string or a Lisp expression that evaluates to a string. If several commands are given, all of them will temporarily be pushed onto the history.
A ‘*’ in the shell command stands for the file name that matched regexp. When Emacs invokes the command, it replaces each instance of ‘*’ with the matched file name.
You can set this variable in your ~/.emacs. For example, to add rules for ‘.foo’ and ‘.bar’ file extensions, write
(setq dired-guess-shell-alist-user (list (list "\\.foo$" "foo-command");; fixed rule ;; possibly more rules... (list "\\.bar$";; rule with condition test '(if condition "bar-command-1" "bar-command-2"))))
This will override any predefined rules for the same extensions.
If this variable is non-
dired-guess-shell-alist-user are matched case-insensitively.
The default is
If this variable is non-
nil, it specifies the name of the GNU
Tar executable (e.g., tar or gnutar). GNU Tar’s
‘z’ switch is used for compressed archives. If you don’t have
GNU Tar, set this to
nil: a pipe using
zcat is then
used instead. The default is
nil value of this variable means that ‘-q’ is passed
gzip, possibly overriding a verbose option in the
environment variable. The default is
This variable specifies a string of switches passed to
An example is ‘-K’ which will make
znew keep a .Z
file when it is smaller than the .gz file. The default is
nil: no additional switches are passed to
This variable holds the history list for commands that read dired-shell commands.