Je me demande - comment puis-je déplacer tous les fichiers dans un répertoire à l'exception de ces fichiers dans un répertoire spécifique (car 'mv' n'a pas d'option '--exclude')?
Supposons que la structure dir soit comme,
|parent
|--child1
|--child2
|--grandChild1
|--grandChild2
|--grandChild3
|--grandChild4
|--grandChild5
|--grandChild6
Et nous devons déplacer des fichiers pour qu'ils apparaissent comme,
|parent
|--child1
| |--grandChild1
| |--grandChild2
| |--grandChild3
| |--grandChild4
| |--grandChild5
| |--grandChild6
|--child2
Dans ce cas, vous devez exclure deux répertoires child1
et child2
, et déplacez le reste des répertoires dans child1
répertoire.
utilisation,
mv !(child1|child2) child1
Cela déplacera tous les autres répertoires dans child1
répertoire.
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 cela est presque copié à partir de la page de manuel find (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 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 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.
Cela déplacera tous les fichiers dans ou en dessous du répertoire courant ne se trouvant pas dans le répertoire ./exclude/ vers/n'importe où ...
find -E . -not -type d -and -not -regex '\./exclude/.*' -exec echo mv {} /wherever \;
#!/bin/bash
touch Apple banana carrot dog cherry
mkdir fruit
F="Apple banana carrot dog cherry"
mv ${F/dog/} fruit
# cela supprime 'dog' de la liste OF, donc il reste dans le répertoire courant et n'est pas déplacé vers 'fruit'
ls | grep -v exclude-dir | xargs -t -I '{}' mv {} exclude-dir