The Dired command ! ( dired-do-shell-command) reads a shell
command string in the minibuffer, and runs that shell command on
one or more files. The files that the shell command operates on
are determined in the usual way for Dired commands (see
Operating on Files). The command X is a synonym for !. The
command & ( dired-do-async-shell-command) does the same, except
that it runs the shell command asynchronously. (You can also do
this with !, by appending a ‘&’ character to the end of the
shell command.) When the command operates on more than one file,
it runs multiple parallel copies of the specified shell command,
one for each file. As an exception, if the specified shell
command ends in ‘;’ or ‘;&’, the shell command is run in the
background on each file sequentially; Emacs waits for each
invoked shell command to terminate before running the next one.
For both ! and &, the working directory for the shell command is
the top-level directory of the Dired buffer. If you tell ! or &
to operate on more than one fi