GNU bug report logs - #6353
cp and mv with single wild card argument acts as if multiple arguments were entered.

Previous Next

Package: coreutils;

Reported by: Darwin Gregory <darwin.gregory <at> gmail.com>

Date: Fri, 4 Jun 2010 16:17:01 UTC

Severity: normal

Done: Bob Proulx <bob <at> proulx.com>

Bug is archived. No further changes may be made.

Full log


View this message in rfc822 format

From: Eric Blake <eblake <at> redhat.com>
To: Darwin Gregory <darwin.gregory <at> gmail.com>
Cc: 6353 <at> debbugs.gnu.org
Subject: bug#6353: cp and mv with single wild card argument acts as if multiple arguments were entered.
Date: Fri, 04 Jun 2010 14:43:33 -0600
[Message part 1 (text/plain, inline)]
On 06/04/2010 10:13 AM, Darwin Gregory wrote:
> I did a quick search of the archive, and didn't find this one, but there
> seems to be a potential logical failure in the cp and mv commands.  It may
> be specific to an implementation, but I feel it is a critical issue.

It is generic to how Unix works.  Basically, globs are expanded by the
shell, prior to the command itself being executed.

> If you execute "cp /path/*" the command expands the wildcard, and treats the
> last file as the destination directory.

As it has always done historically, and was standardized by POSIX.

>  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.

Yep.

> 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.

But mv has no idea whether you typed a glob or spelled it out on the
command line.

> 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.

How?  That information is lost by the shell's glob expansion before ls
even starts executing.

> 
> 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.

This behavior is required by POSIX, but you can use an alias or shell
function to instead invoke mv -i or cp -i by default, which will catch
common errors like this.

For more information on globbing, see this FAQ:
http://www.gnu.org/software/coreutils/faq/#expr-2-_002a-3-does-not-work

-- 
Eric Blake   eblake <at> redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

[signature.asc (application/pgp-signature, attachment)]

This bug report was last modified 14 years and 356 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.