Chris
Chris

Reputation: 1697

command line with mv - file disappeared?

Folks, I have a bunch of files compressed with gzip like so:

    ...
la.20110208.gz
va.20110208.gz
la.20110209.gz
va.20110209.gz
    ...

I typed by accident the following command

mv la.20110209* <enter>

while I meant to type

mv la.20110209* /docs_backup/<enter>

Now I cannot find my file: only va.20110209.gz remains. Any idea where la.20110209.gz went? I'm on Ubuntu, running bash shell....

Thanks.

Upvotes: 0

Views: 2345

Answers (2)

SiegeX
SiegeX

Reputation: 140457

When you typed mv *20010209* your shell performed pathname expansion on that such that the mv command saw the following arguments:

mv la.20110208.gz va.20110208.gz ... la.20110209.gz last_file

If last_file just so happens to be a directory, then all the files listed before it will be moved into there. Unless you only have 2 files that matched, this must be what have happened because you would have received an error from mv otherwise.

Look for a directory that matches *20010209* via the following command, that is where you files will be:

find . -type d -name "*20010209*"

Upvotes: 3

Mark Longair
Mark Longair

Reputation: 467921

If there were exactly two files that matched that pattern, I'm afraid that you will have lost one of them. When you type:

mv *20110209*

... bash tries to expand those wildcards before running mv, so what mv would see if just those two files matched is:

mv blahblah.20110209-b.gz blahblah.20110209.gz

So blahblah.20110209.gz would have been overwritten by blahblah.20110209-b.gz. If there were more than two files that matched then you would get the error:

mv: target `blahblah.20110209.gz' is not a directory

The best case would be if *20110209* expanded to a list of files and a directory as the last item, in which case they'd all be moved into that directory. However, it sounds as if this was the first case I mentioned.

(Some people like to alias mv to mv -i for this kind of reason.)

Upvotes: 4

Related Questions