88

This question already has an answer here:

How can I move all files and folders from one directory to another via mv command?

marked as duplicate by Toby Speight, RalfFriedl, roaima, Rui F Ribeiro linux Sep 6 '18 at 17:51

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

migrated from serverfault.com Oct 10 '12 at 16:34

This question came from our site for system and network administrators.

107

Try with this:

mv /path/sourcefolder/* /path/destinationfolder/
  • 24
    This wouldn't include any "hidden" files (eg. .htaccess) – Ben Lessani - Sonassi Oct 5 '12 at 12:53
  • 20
    Good point. If you are using bash, then you can run shopt -s dotglob and then "*" will match hidden files, too. – chutz Oct 5 '12 at 14:52
  • 2
    What happens if there are folders and files with the same name in the destination folder? Are they overwritten? – user1063287 Jun 14 '16 at 1:08
  • 2
    ... it seems folders with the same name are not overwritten. mv: cannot move '/a/js' to '/b/js': Directory not empty – user1063287 Jun 14 '16 at 1:29
  • 2
    You just pass -f to it to overwrite – Luka Jul 20 '18 at 11:22
18

zsh:

mv /src/*(D) /dst/

(D) to include dot-files.

  • Syntax error on (D) Why?? – Pathros Jun 23 '18 at 17:12
  • 3
    @Pathros, probably because you'd not doing doing it in zsh. – Stéphane Chazelas Jun 23 '18 at 19:13
  • I know I accepted the first answer many years ago, and it's stupid for me now to change it. But actually, I've been always using this method. – Luka Jul 20 '18 at 11:23
12

This works for me in Bash (I think this depends on your shell quite a bit...)

$  mv source/{,.}* /destination/folder/here
  • 4
    Actually, it shouldn't since in Bash source/{,.}* matches dir-entries named ./ and ../ – poige Oct 10 '12 at 21:48
  • . is skipped due to syntax, and .. is skipped too as it's identical in both locations (the mv command realizes this scenario). Your concern is noted, but the command does actually work. – Niall Byrne Oct 10 '12 at 22:39
  • 1
    When I try I get mv: overwrite 'destination/.'? mv: overwrite 'destination/..'?, but adding -n to mv stops it from trying to overwrite – Putnik Dec 5 '12 at 20:05
  • 2
    @Putnik - that's a good gotcha! what os/distro ? ( I was working on OSX when I was messing around with this...) – Niall Byrne Dec 7 '12 at 3:38
  • 1
    @Niall Byrne - I see the same prompt as Putnik. Using Ubuntu 14.04. – Mark Doliner Dec 23 '14 at 6:16
4

This works for me in Bash 4.2.46, it moves all files and folders including hidden files and folders to another directory

mv /sourcedir/{,.[^.]}* /destdir/

Notice that .[^.]* means all hidden files except . and ..

1

I'd say it's a bit boring, but really bullet-proof (GNU) way is:

cd /SourceDir && find ./ -maxdepth 1 -mindepth 1 -exec mv -t /Target/Dir {} +

P. S. Now you can possibly see why lots of people do prefer Midnight Commander, though.

0

If you only want to do a cut and paste-like action there is a simple way that worked for me:

$mv /media/dir_source $HOME/Documents/ 

It will move the folder named dir_source located in /media to the directory $HOME/Documents/

-2

yet another way just for the heck of it (because I love convoluted ways to do things I guess)

cd /source
for f in $(\ls -QA); do eval mv $f /destination/$f; done

the -Q and the -A are not POSIX, however the -A is fairly prevalent, and to not use the -Q you need to change the IFS (which then means you don't need the eval but need to quote the variable)

IFS="
" && for f in $(ls -A); do mv "$f" /destination/"$f"; done
  • ls -Q doesn't output in a format that is suitable to use with eval or even $(...). Try after having run touch '$(reboot)' for instance (or touch '$(uname)' for a milder version). – Stéphane Chazelas Oct 8 '15 at 14:56
  • -A is now POSIX (since POSIX.1-2008). – Stéphane Chazelas Oct 8 '15 at 14:58

Not the answer you're looking for? Browse other questions tagged or ask your own question.