Move all files from subdirectories to current directory?
Solution 1
You can also use the -mindepth
option:
find . -type f -mindepth 2 -exec mv -i -- {} . \;
(Together with -maxdepth
you could also limit the hierarchy levels from which to collect the files.)
I used mv -i
(“interactive”) to make mv
ask before overwriting files. With a lot of subdirectories, there may be name clashes you'd like to be warned about.
The --
option stops option processing, so mv
doesn't get confused by filenames starting with a hyphen.
Clean up the whole bunch of empty subdirectories with
find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;
Solution 2
Try this:
find ./*/* -type f -print0 | xargs -0 -J % mv % .
More Info: Try the find-stamement alone, it should give you a list with all the files you want to move (leave out the -print0
). Example:
probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7
with -print0
and xargs
you are now creating a list of statements to be executed. The -J %
flag means, insert the list element here, so mv $FILE .
is executed for every file found.
The above is working for the BSD xargs. If you're using the GNU-version (Linux) take -I %
instead of -J %
Solution 3
mv */* .
It will move all files from all subdirectories to current directory.
If you need some cleanup, you could use
find . -type d -empty -delete
It will delete all empty subdirectories.
Richard
Updated on September 18, 2022Comments
-
Richard almost 2 years
How can I move the files contained in all subdirectories to the current directory, and then remove the empty subdirectories?
I found this question, but adapting the answer to:
mv * .
did not work; I received a lot of warnings looking like:
mv: wil and ./wil are identical
The files contained in the subdirectories have unique names.
-
G-Man Says 'Reinstate Monica' over 9 yearsThat won't find files that don't have a
.
in their name, will it? -
Filnor almost 6 yearsIs there also a way to skip the question for overwriting the files by not overwrting them?
-
Florian Jenn almost 6 yearsOptions for mv:
-n, --no-clobber
: do not overwrite an existing file. You might be interested in-b, --backup
, too.