find: Viewing And Editing

 
 9.1 Viewing And Editing
 =======================
 
 To view a list of files that meet certain criteria, simply run your file
 viewing program with the file names as arguments.  Shells substitute a
 command enclosed in backquotes with its output, so the whole command
 looks like this:
 
      less `find /usr/include -name '*.h' | xargs grep -l mode_t`
 
 You can edit those files by giving an editor name instead of a file
 viewing program:
 
      emacs `find /usr/include -name '*.h' | xargs grep -l mode_t`
 
    Because there is a limit to the length of any individual command
 line, there is a limit to the number of files that can be handled in
 this way.  We can get around this difficulty by using 'xargs' like this:
 
      find /usr/include -name '*.h' | xargs grep -l mode_t > todo
      xargs --arg-file=todo emacs
 
    Here, 'xargs' will run 'emacs' as many times as necessary to visit
 all of the files listed in the file 'todo'.  Generating a temporary file
 is not always convenient, though.  This command does much the same thing
 without needing one:
 
      find /usr/include -name '*.h' | xargs grep -l mode_t |
      xargs sh -c 'emacs "$@" < /dev/tty' Emacs
 
    The example above illustrates a useful trick; Using 'sh -c' you can
 invoke a shell command from 'xargs'.  The '$@' in the command line is
 expanded by the shell to a list of arguments as provided by 'xargs'.
 The single quotes in the command line protect the '$@' against expansion
 by your interactive shell (which will normally have no arguments and
 thus expand '$@' to nothing).  The capitalised 'Emacs' on the command
 line is used as '$0' by the shell that 'xargs' launches.
 
    Please note that the implementations in GNU 'xargs' and at least BSD
 support the '-o' option as extension to achieve the same, while the
 above is the portable way to redirect stdin to '/dev/tty'.