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.
- 3,257
- 2
- 16
- 7
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 ".".
- 691
-
1it works but I get
mv: rename fake/. to ./.: Invalid argumentandmv: rename fake/.. to ./..: Invalid argument– Maslow Jul 19 '19 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" – tolginho Jan 06 '21 at 06:05
This is possible with the following methods:
Using
rsync:rsync -vua --delete-after foo/ .Using
cpandrmdir:cp -vaR foo/. . && rmdir foo/Using
mv(withdotgloboption 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 shoptandman 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
[!.].
- 20,988
-
What are the rsync switches
-v,-u,-aand-rdoing? AFAICT,-vis verbose, which just makes rsync print more information.-umeans update - only copy a file if it is newer. That doesn't seem relevant.-ameans archive. That will copy the owner and permissions of the file, and make the sync recursive.-rmeans recursive, but that's already covered by-a. – rjmunro Feb 07 '17 at 16:59 -
-uis 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-aas you mentioned. – kenorb Feb 07 '17 at 17:03 -
1
mv foo/* foo/.[^.]* .would miss a file calledfoo/..bar..for instance. Note that for POSIX shells, you need[!.]. – Stéphane Chazelas Feb 07 '17 at 17:24 -
1It should be mentioned, that
rsync -vua --delete-after foo/ .deletes everything else that might already exists in the current directory. – David Apr 24 '18 at 10:12 -
I don't see how the
cpsuggestion will work? It only copies the files, not moves them, and thenrmdirwill fail because "foo" directory is not empty. – Davor Cubranic Mar 24 '21 at 13:11 -
I do love your idea of making use of the
dotglobshell option to make themv /* .solution work for all files -- very elegant! But I think you also meant to&& rmdir fooafterwards. – Davor Cubranic Mar 24 '21 at 13:14 -
One big disadvantage of
rsyncseems to be that it actually copies the files, which is very expensive for large files.mvjust changes pointers. – Cornelius Roemer Nov 03 '21 at 18:48
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 * ../
- 229
-
15Additional safety tip: When deleting a directory you know should be empty,
rmdircomplains and exits if the directory isn't empty, whilerm -rwould instead just have deleted it and all its contents. (It's a poka-yoke.) – Anko Jun 14 '14 at 11:40 -
-
@MarkLalor One reason might be the presence of hidden files, like the ubiquitous
.DS_storein macOS. Themvcommand above won't move those (withoutdotglobset). – AkselA Feb 07 '17 at 15:24 -
The
mvinvocation as written will miss dot files, and therm -rfone is unsafe. If the move worked correctly, you should be able to justrmdirthe source directory because it will be empty. – Davor Cubranic Mar 24 '21 at 13:08
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
- 131
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
- 281
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.
- 133
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
- 109
-
This is only moving one specific subfolder up one level, unlike what's requested, so no, this isn't the best answer. – Forage Jan 11 '24 at 10:45
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. – Caleb Jun 14 '14 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. – Caleb Jun 14 '14 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.. – Ricardo Havoc Jun 14 '14 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.. – Ricardo Havoc Jun 14 '14 at 11:19
.*not just*if the archive contained dot-files. Also add&& rmdir myfolderto 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. – Caleb Aug 24 '11 at 20:53.*. Removing the original folder is both trivial and not asked for so we'll let OP deal with that him/herself. – Rudu Aug 24 '11 at 20:57*and.*in one line? just curiosity – Richard Nov 13 '12 at 20:40mvwill 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). – Caleb Nov 13 '12 at 20:50/bin/mv: Argument list too long– dragosrsupercool Nov 17 '14 at 07:46myfoldercontains a subdirectory calledmyfolder? That wouldn't work. Is there any clean way of avoiding this, or tell mv to ignore this or replace the source in that case? – white_gecko Nov 18 '16 at 14:25