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

≡放荡痞女 提交于 2019-11-28 16:26:39

问题


I am wondering - how can I move all the files in a directory except those files in a specific directory (as 'mv' does not have a '--exclude' option)?


回答1:


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.




回答2:


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).




回答3:


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-tree
mv the-tree where-you-want-it
mv 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 ../c
mv a final_destination
mkdir -p a/b
mv ../c a/b/c

Or something like that. Otherwise, you might be able to get find to help you.




回答4:


This will move all files at or below the current directory not in the ./exclude/ directory to /wherever...

find -E . -not -type d -and -not -regex '\./exclude/.*' -exec echo mv {} /wherever \;



回答5:


#!/bin/bash

touch apple  banana  carrot  dog  cherry

mkdir fruit

F="apple  banana  carrot  dog cherry"

mv ${F/dog/} fruit

# this removes 'dog' from the list F, so it remains in the current directory and not moved to 'fruit'




回答6:


ls | grep -v exclude-dir | xargs -t -I '{}' mv {} exclude-dir


来源:https://stackoverflow.com/questions/4612157/how-to-use-mv-command-to-move-files-except-those-in-a-specific-directory

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!