How do I move files out of nested subdirectories into another folder in ubuntu? (Trying to strip off many subfolders)
There is a great answer in the askubuntu-QA.
To do so, Open a terminal and execute this command:
mv -v ~/Downloads/* ~/Videos/
It will move all the files and folders from Downloads folder to Videos folder.
To Move all files, but not folders:
But, If you are interested to move all files (but not folders) from Downloads folder to Videos folder, use this command
find ~/Downloads/ -type f -print0 | xargs -0 mv -t ~/Videos
To move only files from the Download folders, but not from sub-folders:
If you want to move all files from the Downloads folder, but not any files within folders in the Download folder, use this command:
find ~/Downloads/ -maxdepth 1 -type f -print0 | xargs -0 mv -t ~/Videos
here,
-maxdepth
option specifies how deep find should try,1
means, only the directory specified in the find command. You can try using2
,3
also to test.See the Ubuntu find manpage for a detailed explanation.
Source
Solution
find /src/dir -type f -exec mv --backup=numbered -t /dst/dir {} +
The command will find all regular files under /src/dir
(including all subdirectories) and move them to the /dst/dir
by use of the command mv
. Just replace the directories by yours. Files with the same names will be renamed automatically.
Selecting files to move
If you want to move just MP3 files, add -iname "*.mp3"
option to the find
command after -type f
.
Comparison to the reply by c0dev
Only the second command in the c0dev's reply answers the question. Below is how does it compare to this reply. The points 3. and 4. can be resolved in the other reply the same way as here.
- Except
mv
the solution with-exec +
does not need to call an additional command likexargs
orparallel
and hand over the file names twice. - The other reply will silently overwrite files which have the same name. Here the files will be automatically renamed thanks to the option
--backup=numbered
. Unfortunately these backups with suffix like~3~
will be hidden in most of the file manages by default. Unfortunatelymv
does not allow changing of the suffix but it could be easily post-processed by additional commands. This is a GNU extension. - Contrary to
-print0
-exec command {} +
is a part of IEEE Std 1003.1 (POSIX), ISO/IEC 9945 and The Single UNIX Specification standards. Thus it should be more portable. See IEEE Std 1003.1, 2004 Edition, IEEE Std 1003.1, 2013 Edition and 0000243: Add -print0 to "find". But anyway the required-t
switch ofmv
is a GNU extension so the whole command is not portable between POSIX systems.
Note: In the case find
would be able to produce paths starting with -
(I do not know of any such implementation of find
at the moment.) the {}
should be preceded by the end-of-options indicator: --
.