In Linux (Ubuntu), how do you move all the files and directories to the parent directory?
114 Answers
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.
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 * ../ 3It 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.
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 *.*
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 *
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.
2Assuming 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.
A method which causes no errors and works every time:
ls -1A . | while read -r file do mv "./${file}" .. done 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 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).
1find -type f|while read line; do mv $line ${line##*/}; done 1There's a lot of answers to this question, which proves the flexibility of Bash commands. However, to me a very simply solution that does the trick nicely is this one:
mv * .[^.]* .??* .. mv move; * select all files and folders; .[^.]* collects up the hidden files, with one dot at the start of their name; .??* will select files that start with two dots followed by other characters; .. is the destination, which in this case is the parent folder.
Note, using .[^.]* and .??* will ensure you only select those files with a single dot followed by something other than a dot, and those with two dots followed by other characters.
If you'd like to avoid trying to remember this, I suggest setting up an alias, such as, alias mvallup="mv * .[^.]* .??* ..". Add this to ~/.bash_aliases. Now you can just type mvallup and it's a done deal.
A shorter version of this was suggested by William Edwards, but it didn't include hidden files. He gave an example for also moving hidden files, but that was not exampled as simply as it could have been (mv /path/subfolder/{.,}* /path/) hence why I'm posting this very simple option.
One liner to combine find and mv
Find folder in which we are interested see find
For each such folder we execute:
echo "Moving $found_folder" # Just print (cd "$found_folder" && mv * ../); # enter dir AND move content to parent rmdir "$found_folder" # remove dir, this will be done only when dir is empty so nice check is everything fine for found_folder in $(find . -type d -wholename '*/config/my_catchy_name'); do echo "Moving $found_folder"; (cd "$found_folder" && mv * ../); rmdir "$found_folder"; done; - Moves sub dirs (when destination doesn't have already such dirs)
- Moves hidden files
- Moves symbolic links without making mess
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 * .. 1