How to use 'mv' command to move files except those in a specific directory? How to use 'mv' command to move files except those in a specific directory? linux linux

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.