La page de manuel assez bien explique tout.
find-exec commande {} \;
Pour chaque résultat, command {}
est exécutée. Toutes les occurrences de {}
sont remplacés par le nom de fichier. ;
est précédé d'une barre oblique pour éviter que le shell de l'interpréter.
find-exec commande {} +
Chaque résultat est ajouté à l' command
et exécuté par la suite. Prenant le commandement des limitations de longueur en compte, je pense que cette commande peut être exécutée plusieurs fois, avec la page de manuel de me soutenir:
le nombre total d'appels de la commande sera beaucoup moins que le nombre de fichiers correspondants.
Notez cette citation de la page de manuel:
La ligne de commande est construit de la même manière que xargs construit ses lignes de commande
C'est pourquoi aucun des caractères sont autorisés entre {}
et +
, sauf pour les espaces. +
permet de trouver détecter que les arguments doivent être joints à la commande comme xargs
.
La solution
Heureusement, mv
peut accepter le répertoire cible comme un argument, -t
ou plus de paramètre --target
. C'est l'utilisation sera:
mv -t target file1 file2 ...
Votre find
commande devient:
find . -type f -iname '*.cpp' -exec mv -t ./test/ {} \+
À partir de la page de manuel:
-exec commande ;
Exécution de la commande; vrai si 0 statut est retourné. Tous les arguments suivants à trouver sont les arguments de la commande jusqu'à ce qu'un argument consistant en ;' is encountered. The string
{} "est remplacé par le nom du fichier en cours en cours de traitement partout où il se produit dans les arguments de la commande, et pas seulement dans les arguments où il est seul, comme dans certaines versions de trouver. Deux de ces constructions pourraient avoir besoin d'être échappés (avec un `\') ou de la cité afin de les protéger de l'expansion par le shell. Voir les EXEMPLES de la section pour des exemples de l'utilisation de l'option-exec. La commande spécifiée est exécuté une fois pour chaque fichier correspondant. La commande est exécutée dans le répertoire de démarrage. Il y a des inévitables problèmes de sécurité entourant l'utilisation de l'-exec action; vous devez utiliser l'-execdir option à la place.
-exec commande {} +
Cette variante de l'-exec action exécute la commande spécifiée sur les fichiers sélectionnés, mais la ligne de commande est construit en ajoutant chaque nom de fichier sélectionné à la fin; le nombre total d'appels de la commande sera beaucoup moins que le nombre de fichiers correspondants. La ligne de commande est construit de la même manière que xargs construit ses lignes de commande. Une seule instance de `{}' est permis dans la commande. La commande est exécutée dans le répertoire de démarrage.