Comment utiliser la commande ' mv ' pour déplacer des fichiers à l'exception de ceux dans un répertoire spécifique?
4 réponses
Supposons que la structure dir est comme,
|parent
|--child1
|--child2
|--grandChild1
|--grandChild2
|--grandChild3
|--grandChild4
|--grandChild5
|--grandChild6
Et nous devons déplacer des fichiers afin qu'il apparaisse comme,
|parent
|--child1
| |--grandChild1
| |--grandChild2
| |--grandChild3
| |--grandChild4
| |--grandChild5
| |--grandChild6
|--child2
Dans ce cas, vous devez exclure les deux répertoires child1
et child2
, et déplacer le reste de l'répertoires de child1
répertoire.
Utilisation,
mv !(child1|child2) child1
Cela déplacera tout le reste des répertoires dans le répertoire child1
.
Puisque 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 de recherche (je pense que l'utilisation de MV --target-directory est meilleure que cpio).
Ce n'est pas exactement ce que vous avez demandé, mais cela pourrait faire le travail:
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 de l'arborescence plus grande à déplacer.)
Donc, si j'ai a/
et 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 être en mesure d'obtenir find
pour vous aider.
Cela déplacera tous les fichiers au niveau ou en dessous du répertoire courant qui ne se trouve pas dans le ./exclure/ répertoire /de la mesure...
find -E . -not -type d -and -not -regex '\./exclude/.*' -exec echo mv {} /wherever \;