mv: Directory not empty
Solution 1:
Though its man page doesn't document it, mv
will refuse to rename a directory to another directory if the target directory contains files. This is a good thing in your case because you turn out to want to merge the content of the source into the target, which mv
will not do.
Use rsync -a backup/ backupArchives/
instead. After that rm -rf backup/*
.
Instead of using rsync
, you also can do the classical
(cd backup && tar c .) | (cd backupArchives && tar xf -)
which earns you more geek points.
Solution 2:
Quick and dirty, if you know what you are doing:
cp -r ./backup/* ./backupArchives && rm -R ./backup/*
Solution 3:
After the directory you moving you need *
(represents any text or number). For example:
mv /var/www/* /recovery/wwwrecovery/
thats all, if you moving files, than you move as:
mv /var/www/index.php /recovery/index.php
Another way is to pack that folder content by using tar:
tar -cvzpf backup.tar.gz /var/www
Then move it lie any other file. Also I recommend this step because tar compresses it and make it smaller in size.
To extract the files to another folder use
tar -xvzpf /var/www/
If you need to copy to a location you don't own, make sure to prepend your command with the sudo
command after whichever option you decide to use.
sudo tar -cvzpf backup.tar.gz /var/www/
Solution 4:
Sure rsync
does work, but this might work as well for machine that does not support rsync
(i.e in cpanel, which rsync is not installed by default).
What about using:
cd /path/to/backup/ && cp -R --parents ./* ../backupArchives
Then remove the backup
directory if necessary
Note1: You need to cd
to the backup
directory before executing the cp -R --parents ...
Note2: Double check the backupArchives
directory if you got the new files from backup.
Solution 5:
Before asking the question, let's consider a simplified case.
Suppose in /home/admin we have two folders foo
and bar
which have the same subdirectory structure, but each contains different files in it. Now we want to merge them into one. When we do things like mv foo/* bar
, the error mv: directory not empty
occurs.
My solution is to give up command line tools and switch to a GUI file manager, for example, dolphin. When you rename foo
to bar
in dolphin, it gives you the option to write into the destination folder, and asks you whether to overwrite existing files, interactively. This avoids copy and delete, which in effect saves your time without a single line of code.
PS: I didn't test every file manager out there. But most of them should have this feature.