83

In Linux (Ubuntu), how do you move all the files and directories to the parent directory?

12 Answers 12

71
find . -maxdepth 1 -exec mv {} .. \;

this will move hidden files as well.

You will get the message:

mv: cannot move `.' to `../.': Device or resource busy

when it tries to move . (current directory) but that won't cause any harm.

  • 1
    It will move all files from all subdirectories to the parent of the current directory, too. I'd use -maxdepth 1 to be sure. – ℝaphink Dec 27 '09 at 17:36
  • 1
    Now it says: mv: cannot move ./scripts' to ../scripts': Directory not empty – nekbaba Dec 27 '09 at 17:43
  • 1
    You must have a directory called scripts in your parent directory AND in your current directory. You will have to rename this one before you move it. – ℝaphink Dec 27 '09 at 17:44
  • 1
    It worked but you left one one very important bit of information - you must run this from the subdirectory. Also this will not delete the subdirectory itself so you must back up one directory and do a rmdir on the subdirectory. – crafter May 10 '16 at 16:50
95

I came here because I'm new to this subject as well. For some reason the above didn't do the trick for me. What I did to move all files from a dir to its parent dir was:

cd to/the/dir
mv * ../
  • 14
    This does not move hidden file though – Wavesailor Sep 10 '15 at 10:51
  • 1 liner: (cd ${ANDROID_NDK_HOME}/android-ndk-r14b/ && mv * ../) – Dawid Drozd Dec 7 '17 at 11:51
10

Type this in the shell:

mv *.* ..

That moves ALL the files one level up.

The character * is a wildcard. So *.deb will move all the .deb files, and Zeitgeist.* will move Zeitgeist.avi and Zeitgeist.srt one folder up, since, of course, .. indicates the parent directory.

To move everything including folders, etc, just use * instead of *.*

  • 3
    this didn't work with the dirs! or the hidden files – nekbaba Dec 27 '09 at 17:34
  • It works with dirs, at least for me. – maaartinus Jan 25 '11 at 21:21
  • 5
    You want * not *.* to include directories – Chris S Apr 19 '13 at 19:58
  • Its a nice documentary – BlackBurn027 Nov 17 '16 at 6:36
6

It can't be more simple than:

mv * ../

To also move hidden files:

mv /path/subfolder/{.,}* /path/ 

mv is a command to move files, * means all files and folders and ../ is the path to the parent directory.

2

In bash you can use shopt -s dotglob to make * match all files and move them simply by

shopt -s dotglob; mv * ..

This is not the best solution since the setting is permanent for the shell until you change it by

shopt -u dotglob

but I think it's good to know.

  • 4
    Call it in a subshell: (shopt -s dotglob && mv * ..). That way, the option is only local to that subshell. – Martin Ueding Jan 26 '13 at 20:25
  • Good answer - it's simple, includes hidden files and doesn't cause an error about copying '.' and '..' – Daniel Howard Nov 9 '17 at 13:06
1

A method which causes no errors and works every time:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done
1
find . -maxdepth 2 -type f -exec mv {} .. \;

I used a variation of above to move all the files from subfolders into the parent.

I'd got data in folders by year, but found by using metadata I could have them all in the same folder which made it easier to manage.

eg.

/data/2001/file_1
/data/2002/file_2
/data/2003/file_3
0

Assuming all your hidden files begin with dot followed by a letter or a number (which they should), you could use

mv * .[A-Za-z0-9]* ..

The .[A-Za-z0-9]* part is to make sure you don't try to move . or .. along, which would fail.

0

It's simple to move all files and folders to the parent directory in Linux.

Go to that folder and use this command:

mv * /the full path

For example, if your files and folders are as follows:

/home/abcuser/test/1.txt 
                   2.txt
                   3.jpg
                   4.php
                   1folder
                   2folder

Go to that folder via cd:

cd /home/abcuser/test
mv * /home/abcuser

All your files and folders will move to the abcuser folder (parent directory).

  • 2
    Thanks @Gareth, was about to the same. Abhishek, please don't post any unrelated links, where's the sense in that? Also, check your formatting please. Additionally, /the full path does not work in Linux, you have to escape spaces with /the\ full\ path. – slhck Nov 3 '11 at 11:47
0

There is no need to change directories. Just include * at the end of path:

mv /my/folder/child/* /my/folder/

Above only moves non hidden files. To move only hidden files use .*

mv /my/folder/child/.* /my/folder/

Above two can be combined in to one command:

mv /my/folder/child/{.,}* /my/folder/

Also see: How to move all files including hidden files into parent directory via *

0
find -type f|while read line; do mv $line ${line##*/}; done
  • Thanks for contributing an answer. While this might work in simple scenarios, piping find into while read is a bad way to use find, and better answers have already been posted. – Scott Dec 13 '18 at 16:29
-1

switch to sub directory and execute following command for copy or move files.

ex: a is parent directory and b is sub directory, we want to move/copy all files from b to a (sub directory to parent directory).

cd b
cp * ..
mv * ..
  • Welcome to Super User! This duplicates another answer and adds no new content. Please don't post an answer unless you actually have something new to contribute. – DavidPostill May 20 '16 at 10:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy