Je ne connais pas encore très bien toutes les astuces de grep/find/awk/xargs
.
J'ai des fichiers correspondant à un modèle particulier, par exemple *.xxx
. Ces fichiers se trouvent à des emplacements aléatoires dans un certain répertoire. Comment puis-je trouver tous ces fichiers et les déplacer dans un dossier de mon répertoire personnel sous Unix (qui n'existe peut-être pas encore)?
Réponses:
la source
mv -i -t ~/dst {} +
Si vous souhaitez déplacer tous les fichiers d'une hiérarchie de répertoires vers un répertoire de destination unique, en bash ≥4 (insérez
shopt -s globstar
votre~/.bashrc
) ou zsh:Dans d'autres coquilles:
Comment lire cette
find
commande:.
: parcourir le répertoire courant-name '*.xxx'
: agir sur les fichiers dont le nom correspond à ce modèle-exec … \;
: exécuter cette commande sur chaque fichier, en remplaçant{}
par le chemin d'accès au fichierIl existe une commande plus complexe
find
qui est plus rapide si vous avez de nombreux fichiers car elle n'a pas besoin d'appeler unmv
processus distinct pour chaque fichier:Le
+
à la fin indiquefind
d'appeler la commande sur plusieurs fichiers à la fois. Puisquefind
ne peut mettre les noms de fichiers qu'à la fin de la ligne de commande etmv
doit avoir le répertoire de destination en dernier, nous utilisons un shell intermédiaire pour réorganiser les arguments ("$0"
est le premier argument du shell~/new-directory
, et"$@"
sont les arguments suivants provenant defind
expansion de{}
).la source
Si vous souhaitez répliquer la structure de répertoires des fichiers source correspondants dans le nouveau répertoire cible, vous pouvez utiliser l' option --parents de GNU cp :
la source
vous pouvez utiliser sans trouver
-exec
aussi bien:la source
find -exec
c'est beaucoup plus sûr; ce qui précède échouera sur les noms de fichiers contenant des espaces blancs, par exemple.