Copyright (C) 2000-2012 |
GNU Info (fileutils.info)Target directoryTarget directory ================ Some GNU programs (at least `cp', `install', `ln', and `mv') allow you to specify the target directory via this option: `--target-directory=DIRECTORY' Specify the destination DIRECTORY. The interface for most programs is that after processing options and a finite (possibly zero) number of fixed-position arguments, the remaining argument list is either expected to be empty, or is a list of items (usually files) that will all be handled identically. The `xargs' program is designed to work well with this convention. The commands in the `mv'-family are unusual in that they take a variable number of arguments with a special case at the _end_ (namely, the target directory). This makes it nontrivial to perform some operations, e.g., "move all files from here to ../d/", because `mv * ../d/' might exhaust the argument space, and `ls | xargs ...' doesn't have a clean way to specify an extra final argument for each invocation of the subject command. (It can be done by going through a shell command, but that requires more human labor and brain power than it should.) The `--target-directory' option allows the `cp', `install', `ln', and `mv' programs to be used conveniently with `xargs'. For example, you can move the files from the current directory to a sibling directory, `d' like this: (However, this doesn't move files whose names begin with `.'.) ls |xargs mv --target-directory=../d If you use the GNU `find' program, you can move _all_ files with this command: find . -mindepth 1 -maxdepth 1 \ | xargs mv --target-directory=../d But that will fail if there are no files in the current directory or if any file has a name containing a newline character. The following example removes those limitations and requires both GNU `find' and GNU `xargs': find . -mindepth 1 -maxdepth 1 -print0 \ | xargs --null --no-run-if-empty \ mv --target-directory=../d automatically generated by info2www version 1.2.2.9 |