12

The command executed was "mv space *" in a folder with 14 GB of data.

mv *

du -hs 

is the same so where has the 14 GB of data gone? What have I done?

4
  • More information is needed. Which platform?
    – Jarmund
    Apr 18, 2014 at 9:06
  • 4
    @Jarmund I think it's safe to assume some *nix, considering that both commands mentioned are common commands on Unix-like systems. In this regard, I think it's safe to say that most shells work the same. So we can deduce enough to give a useful answer even though the exact platform is not explicitly stated.
    – user
    Apr 18, 2014 at 10:59
  • Another pitfall to mention. You should NEVER run mv or cp with "" on untrusted data. That is because "" gets expanded, and files with names like "--verbose" get command-line arguments. What to use instead: cp ./* anotherFolder Feb 27, 2015 at 12:56

2 Answers 2

31

My guess is that bash expands the wildcard, and thus moves every folder into your last one.

For example:

$ ls
test1  test2  test3  test4

$ mv *

$ ls
test4

$ ls test4
test1  test2  test3

Here, mv * is expanded to mv test1 test2 test3 test4 corresponding to mv [OPTION]... SOURCE... DIRECTORY format. Thus, every folder is moved into the last one.

1
  • 9
    This. By the way, if you want to use * in a mv (or cp) then have a look at their --target-directory switch. It ensures that you don't get bit by things like this.
    – user
    Apr 18, 2014 at 10:58
2

As described by @ssssteffff, with mv *, the shell is doing wildcard expansion from files in current directory. However the behaviour of mv command depends on how many arguments * expands to. If there are more than two arguments, then the last argument must be a directory:

   mv [OPTION]... SOURCE... DIRECTORY

So,

I created 5 files

$ touch 1 2 3 4 5
$ ls
1  2  3  4  5
$ mv *
mv: target ‘5’ is not a directory
$ ls
1  2  3  4  5

Now if I create a directory which comes as a last parameter to wild-card expansion, then:

$ mkdir 6
$ mv *
$ ls
6
$ ls 6
1  2  3  4  5

You should double check what that last argument was.

  • If the last argument was a directory, then your data is perhaps safe.
  • If the total number of arguments were 2, and the last argument was a directory, then also your data is perhaps safe.
  • If the total number of arguments were 2, and the last argument was a file, then the second file is gone for sure.

Are you sure you didn't see the error something like this?

 mv: target ‘5’ is not a directory`

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .