How to use 'mv' command to move files except those in a specific directory?
Lets's assume the dir structure is like,
|parent |--child1 |--child2 |--grandChild1 |--grandChild2 |--grandChild3 |--grandChild4 |--grandChild5 |--grandChild6
And we need to move files so that it would appear like,
|parent |--child1 | |--grandChild1 | |--grandChild2 | |--grandChild3 | |--grandChild4 | |--grandChild5 | |--grandChild6 |--child2
In this case, you need to exclude two directories child1
and child2
, and move rest of the directories in to child1
directory.
use,
mv !(child1|child2) child1
This will move all of rest of the directories into child1
directory.
Since find does have an exclude option, use find + xargs + mv:
find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory
Note that this is almost copied from the find man page (I think using mv --target-directory is better than cpio).
This isn't exactly what you asked for, but it might do the job:
mv the-folder-you-want-to-exclude somewhere-outside-of-the-main-treemv the-tree where-you-want-itmv the-excluded-folder original-location
(Essentially, move the excluded folder out of the larger tree to be moved.)
So, if I have a/
and I want to exclude a/b/c/*
:
mv a/b/c ../cmv a final_destinationmkdir -p a/bmv ../c a/b/c
Or something like that. Otherwise, you might be able to get find
to help you.