Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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

share|improve this question

11 Answers 11

up vote 28 down vote accepted
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.

share|improve this answer
    
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  
it says find: missing argument to `-exec' – nekbaba Dec 27 '09 at 17:37
    
@raphink, good call! sorry about that,try now :) – John T Dec 27 '09 at 17:37
    
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

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 * ../
share|improve this answer
    
add 1 for simplicity. – giacatho Aug 25 '15 at 3:24
1  
This does not move hidden file though – Wavesailor Sep 10 '15 at 10:51

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 for example Zeitgeist.* will move Zeitgeist.avi and Zeitgeist.srt one folder up.

And, of course, .. indicates the parent directory.

share|improve this answer
1  
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
    
You want * not *.* to include directories – Chris S Apr 19 '13 at 19:58

A method which causes no errors and works every time:

ls -1A . | while read -r file                                                    
do                                                                                  
    mv "./${file}" ..                                                            
done
share|improve this answer
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
share|improve this answer

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.

share|improve this answer

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.

share|improve this answer
1  
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

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).

share|improve this answer
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

It can't be more simpler 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.

share|improve this answer
    
This won't work on hidden files, will it? – BenjiWiebe Jul 16 '14 at 20:36
    
@BenjiWiebe I edited my answer. – William D. Edwards Jul 17 '14 at 8:57

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 *

share|improve this answer

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 * ..
share|improve this answer
    
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 at 10:46

You must log in to answer this question.