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.



Reply via email to