48 votes

Comment utiliser la commande 'mv' pour déplacer des fichiers à l'exception de ceux d'un répertoire spécifique ?

Je me demande - comment puis-je déplacer tous les fichiers d'un répertoire à l'exception des fichiers d'un répertoire spécifique (car 'mv' n'a pas d'option '--exclude') ?

90voto

Chathura Kulasinghe Points 376

Supposons que la structure dir est comme,

 |parent
    |--child1
    |--child2
    |--grandChild1
    |--grandChild2
    |--grandChild3
    |--grandChild4
    |--grandChild5
    |--grandChild6

Et nous devons déplacer les fichiers pour qu'il apparaisse comme,

 |parent
    |--child1
    |   |--grandChild1
    |   |--grandChild2
    |   |--grandChild3
    |   |--grandChild4
    |   |--grandChild5
    |   |--grandChild6
    |--child2

Dans ce cas, vous devez exclure deux répertoires child1 et child2 , et déplacer le reste des répertoires dans le répertoire child1 .

utilisation,

 mv !(child1|child2) child1

Cela déplacera tout le reste des répertoires dans le répertoire child1 .

4voto

Slartibartfast Points 1296

Étant donné que find a une option d'exclusion, utilisez find + xargs + mv :

 find /source/directory -name ignore-directory-name -prune -print0 | xargs -0 mv --target-directory=/target/directory

Notez que ceci est presque copié à partir de la page de manuel find (je pense qu'utiliser mv --target-directory est mieux que cpio).

2voto

Thanatos Points 13444

Ce n'est pas exactement ce que vous avez demandé, mais cela pourrait faire l'affaire :

 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

(Essentiellement, déplacez le dossier exclu hors de la plus grande arborescence à déplacer.)

Donc, si j'ai a/ et que je veux exclure a/b/c/* :

 mv a/b/c ../c
mv a final_destination
mkdir -p a/b
mv ../c a/b/c

Ou quelque chose comme ça. Sinon, vous pourriez obtenir find pour vous aider.

1voto

sjr Points 5686

Cela déplacera tous les fichiers situés dans le répertoire actuel ou en dessous qui ne se trouvent pas dans le répertoire ./exclude/ vers /whereever...

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

1voto

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X