I have a directory that is unpacked, but is in a folder. How can I move the contents up one level? I am accessing CentOS via SSH.
9 Answers
With the folder called 'myfolder' and up one level in the file hierarchy (the point you want it to put) the command would be:
mv myfolder/* .
So for example if the data was in /home/myuser/myfolder
then from /home/myuser/
run the command.
-
54You may need to also match
.*
not just*
if the archive contained dot-files. Also add ` && rmdir myfolder` to the end o that to remove the now extraneous folder. This is save because it will only run if the mv returns success AND because rmdir will not remove a non-empty directory.– CalebAug 24, 2011 at 20:53 -
2@Caleb is it possible to write both
*
and.*
in one line? just curiosity– RichardNov 13, 2012 at 20:40 -
2@Richard Yes, it is. The arguments for
mv
will all be sources except the LAST argument which needs to be the target for moving (and in the case of multiple sources, needs to be a folder).– CalebNov 13, 2012 at 20:50 -
2
-
1How about nested dirs with same name i.e. exercisism/cli/cli and the problem to move cli (last) one level up?– YurijOct 6, 2020 at 4:56
Just to make it crystal clear, taken from Rudu's answer above, and the comments.
If you need to move all the contents, INCLUDING files that start with a . (like .htaccess, .git, etc), you need to include both * and .* in your command. Like so:
mv subfolder/* subfolder/.* .
That will move contents of subfolder to your current folder. Note the space before the last ".".
-
1it works but I get
mv: rename fake/. to ./.: Invalid argument
andmv: rename fake/.. to ./..: Invalid argument
– MaslowJul 19, 2019 at 14:52 -
If you are unsure about target folder have both folder and files inside then run command separately otherwise it will prompt: "no matches found"– tolginhoJan 6, 2021 at 6:05
This is possible with the following methods:
Using
rsync
:rsync -vua --delete-after foo/ .
Using
cp
andrmdir
:cp -vaR foo/. . && rmdir foo/
Using
mv
(withdotglob
option enabled):shopt -s dotglob # Includes filenames beginning with a dot. mv -- foo/* . # Where foo/ is the folder consisting the files. shopt -u dotglob # Disables previously enabled dotglob option.
where
foo/
is your folder whose content is to be moved one level up.See:
help shopt
andman bash
.Using
mv
(as suggested here):mv foo/* foo/.[^.]* . && rmdir foo/
Note: It would miss a file called
foo/..bar..
.Note: For POSIX shells, you need
[!.]
.
-
What are the rsync switches
-v
,-u
,-a
and-r
doing? AFAICT,-v
is verbose, which just makes rsync print more information.-u
means update - only copy a file if it is newer. That doesn't seem relevant.-a
means archive. That will copy the owner and permissions of the file, and make the sync recursive.-r
means recursive, but that's already covered by-a
.– rjmunroFeb 7, 2017 at 16:59 -
-u
is useful when you don't want to spent extra time of moving data which is already there (especially for slow storage devices). I've removed-r
, since it's covered by-a
as you mentioned.– kenorbFeb 7, 2017 at 17:03 -
1
mv foo/* foo/.[^.]* .
would miss a file calledfoo/..bar..
for instance. Note that for POSIX shells, you need[!.]
. Feb 7, 2017 at 17:24 -
1It should be mentioned, that
rsync -vua --delete-after foo/ .
deletes everything else that might already exists in the current directory.– DavidApr 24, 2018 at 10:12 -
I don't see how the
cp
suggestion will work? It only copies the files, not moves them, and thenrmdir
will fail because "foo" directory is not empty. Mar 24, 2021 at 13:11
just issue an mv command
mv (directory)/* .
if you want to delete the directory then add
rm -rf (directory)
Assumed that you are in a parent directory of (directory)
If you are inside the (directory) then
mv * ../
-
15Additional safety tip: When deleting a directory you know should be empty,
rmdir
complains and exits if the directory isn't empty, whilerm -r
would instead just have deleted it and all its contents. (It's a poka-yoke.) Jun 14, 2014 at 11:40 -
-
@MarkLalor One reason might be the presence of hidden files, like the ubiquitous
.DS_store
in macOS. Themv
command above won't move those (withoutdotglob
set).– AkselAFeb 7, 2017 at 15:24 -
The
mv
invocation as written will miss dot files, and therm -rf
one is unsafe. If the move worked correctly, you should be able to justrmdir
the source directory because it will be empty. Mar 24, 2021 at 13:08
If you get the "Argument list too long" error by using mv * ../
I suggest doing this instead:
find . -name '*.*' -exec mv {} ../ \;
find
: search a folder-name
: match a desired criteria-exec
: run the command that follows{}
: insert the filename found\;
: mark the end of the exec command
i have one short hand command
cp */* .
this will copy all subfolders content on level up of course you can use move
mv */* .
or assign new distenation
cp */* /destination
The question doesn't specify what shell, so here's a zsh variant:
mv myfolder/*(D) .
(D)
ensures both dot and non-dot files are included, but, crucially, not the .
and ..
objects. It's equivalent to kenorb's dotglob solution.
I think surely the best answer is:
mv myfolder/mysubfolder .
Occasaionally you have the problem that both folders have the same name
mv myfolder myfolder.old
mv myfolder.old/myfolder .
rmdir myfolder.old
for those of you on a shared server you'd have to use something like this
To move the files
mv -v ~/public_html/public_html/* ~/public_html/
To copy the files
cp -a ~/public_html/public_html/* ~/public_html/
-
2The question above asks about moving not copying contents. This would duplicate the files by leaving the originals in a subfolder. Also being a "shared" server or not really doesn't have anything to do with this.– CalebJun 14, 2014 at 11:04
-
1
-
4Re your edit: how is that any different that the already upvoted answer? And what does a "shared server" have to do with it? Please edit to explain these items if this is going to be a useful contribution that adds value to what is already here.– CalebJun 14, 2014 at 11:16
-
1I disagree about the shared server not having nothing to do with it. The way the "dir" is entered makes a world of a difference.. Jun 14, 2014 at 11:17
-
1dude why you so mad?... wow.. I was just sharing a little knowledge. We all understand differently and confront different technical problems differently... Have yourself a good day Caleb.. Jun 14, 2014 at 11:19