J'essaye de rassembler tous les fichiers sous le répertoire courant et tous les sous-répertoires dans un répertoire. J'essaye quelque chose comme le suivant
find -type f -exec mv {} collection/{} \;
la commande ci-dessus ne fonctionnera pas car la seconde {}
donne le chemin complet, comment puis-je collecter tous les fichiers?
command-line
find
Lapin
la source
la source
-maxdepth 1
aiderait.find -type f -print0|xargs -0r mv -it colection/
Au lieu d'utiliser
find
(qui fait bien le travail), vous pouvez également utiliser le shell à cette fin.Disons que vous voulez tous les fichiers de $ PWD à $ DEST. La tentative naturelle serait:
Comment cela marche-t-il? L'expression "$ PWD / *" s'étend aux noms de tous les fichiers de ce répertoire. Cette fonction shell est appelée "globbing". Le dernier argument de
mv
est le répertoire de destination. Si vous avez de très nombreux fichiers, cela ne fonctionnera pas car la longueur de la ligne de commande est limitée.Mais la solution a le problème d'omettre les fichiers de points - ou les fichiers, fichiers et répertoires "cachés" dont le nom commence par un ".". Pour résoudre ce problème, vous devez dire à votre shell d'inclure des fichiers dot lors de la globalisation. Pour ce faire, utilisez
lors de l'utilisation
bash
(et vous l'utilisez probablement,bash
sauf si vous avez modifié la valeur par défaut). Dans ce shell, la commande ci-dessus fonctionnera également pour les fichiers dot.En passant, dans
zsh
, vous avez la possibilité de le choisir au cas par cas. Pour ce faire, mettezdans votre
.zshrc
. Ensuite, vous pouvez utiliserpour déplacer tous les fichiers, y compris les fichiers dot. (Le "D" a pour effet d'activer temporairement l'option "GLOB_DOTS").
Maintenant, la question d'origine était de déplacer tous les fichiers normaux (pas les répertoires) de tous les sous-répertoires et leurs sous-répertoires vers un seul répertoire. Cela peut être accompli avec
zsh
:Ici, l'expression
**/*
fait descendre le globber récursivement dans des sous-répertoires. LeD
moyen "sélectionne également les fichiers dot", le.
moyen "ne sélectionne que les fichiers normaux, pas les répertoires".la source
find -type f -exec mv -t collection/ {} +
. Consultez la page de manuel pour savoir comment cela fonctionne.