On Friday 04 June 2010, Darwin Gregory wrote: > If you execute "cp /path/*" the command expands the wildcard, and treats > the last file as the destination directory. If the last file in /path/ is > not a directory the command fails, but not with the appropriate error. > However, if the last file in the directory (or other wildcard expansion) > is a directory, it will copy all earlier files in the expansion to that > directory. > > The same happens for mv. I did mv * in my home directory where the last > entry was a workspace subdirectory. It moved all of my files and > directories to my workspace subdirectory. > > I feel this is an unacceptable outcome for a single argument that is a > wildcard, since whether it works or not is based on the arbitrary presence > or absence of a directory as the final element in the wildcard expansion. > It would be much better to fail with an error indicating "missing > destination file operand" as it does if the first argument does not > contain a wildcard. > > Also, if a wildcard expansion contains exactly 2 elements, the second is > treated as a target whether or not it is a directory, causing a potential > overlay of data.
cp and mv have no fault. It's the shell that expends the wildcard, so cp and mv do not even see it; they just think they've been invoked with multiple arguments, and behave as expected. -- D.
