2010-09-24 13 views
4

J'essaie d'utiliser l'option -exec avec la commande find pour trouver des fichiers spécifiques dans mon répertoire de panoramas massifs et les déplacer vers un emplacement spécifié. La commande que j'utilise ci-dessous transmet un argument d'erreur non trouvé pour -exec. Quelqu'un peut-il signaler mon erreur dans l'analyse de la commande? Ou devrais-je créer une sorte de pipe à la place?Utiliser l'option -exec avec la commande Find dans Bash

$ find -name ~/path_to_directory_of_photos/specific_photo_names * -exec mv {} ~/path_to_new_directory/

+1

Peut-être déplacer cela sur serverfault? –

+0

J'ai voté pour migrer vers SuperUser.Com, mais ce serait plus approprié sur Unix.StackExchange.Com. –

Répondre

7

Vous devez mettre fin à votre commande avec un point-virgule bénéficiant du exec échappé (\;).

+0

Ok merci, a manqué un espace à la fin entre ~/path_to_new_directory et \; ça me faisait trébucher. Résolu. – Hollis

3

Vous devez citer le modèle de nom, sinon le shell développera les caractères génériques avant d'exécuter find. Vous devez également avoir un point-virgule (backslashed pour éviter que le shell l'interprète comme un séparateur de commandes) pour indiquer la fin de la commande mv.

La commande correcte serait:

find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv {} ~/path_to_new_directory \; 
0

Je sais que ce poste est vieux, mais voici ma réponse au cas où il aide quelqu'un d'autre. Voir l'arrière-plan de this post. Si vous terminez la commande avec + au lieu de \; vous pouvez l'exécuter beaucoup plus efficacement. \; provoquera "mv" à être exécuté une fois par fichier, tandis que + fera exécuter "mv" avec le nombre maximum d'arguments. Par exemple.

mv source1 destination/ 
mv source2 destination/ 
mv source3 destination/ 

contre

mv source1 source2 source3 destination/ 

Ce dernier est beaucoup plus efficace. Pour utiliser +, vous devriez aussi utiliser --target-directory. Par exemple.

find ~/path_to_directory_of_photos -name "specific_photo_names*" -exec mv --target-directory="~/path_to_new_directory" {} +