2016-11-15 1 views
0

Je suis un problème avec une commande bash renvoyant l'erreur suivante:Argument manquant à exec

/usr/bin/find: missing argument to `-exec' 

La commande actuelle, je suis en cours d'exécution est:

/usr/bin/find /backup-directory/ -maxdepth 1 -type f -mtime +14 -printf "%f\n" -exec /usr/local/bin/aws s3 mv /backup-directory/{} s3://my-s3-bin/{}\; 

L'objectif était d'avoir cette commande appelée depuis le crontab tous les soirs pour rechercher un répertoire et déplacer tout fichier de plus de 14 jours vers Amazon S3 en utilisant le cli aws.

La commande find fonctionne correctement jusqu'à juste avant le exec, avec la sortie suivante:

/usr/bin/find /backup-directory/ -maxdepth 1 -type f -mtime +14 -printf "%f\n" 
20161030002947.Pg 
20161029002644.Pg 
20161027002705.Pg 
20161028002402.Pg 
20161031002440.Pg 

Et la aws cli déplacer commande avec le nom de fichier explicite à déplacer fonctionne comme prévu: La commande suivante déplacez par exemple 20161030002947.Pg du répertoire de sauvegarde local vers le bac s3. Je ne sais pas pourquoi il casse quand je les mets ensemble avec les paramètres -exec et {}.

La raison tout est appelé à partir du chemin complet est de vous assurer qu'il n'y a pas de problèmes imprévus lorsque la commande est appelée à partir crontab, et le système d'exploitation sur ce serveur est Debian 8.

Répondre

4

Je suggère de remplacer

{}\; 

par

{} \; 
+0

cela au moins laisser exécuter, alors merci. Mais maintenant, je reçois des résultats inattendus. Il semble que cela ne respecte pas le -printf "% f \ n". 20161030002947.Pg Le chemin d'accès fourni par l'utilisateur /backup-directory//backup-directory/20161030002947.Pg n'existe pas. 20161029002644.Pg Le chemin /backup-directory//backup-directory/20161029002644.Pg fourni par l'utilisateur n'existe pas. – Sheldon

+0

Je viens de tester cela en remplaçant la commande aws par echo et je dois avoir une mauvaise compréhension de ce que '-printf"% f \ n "' fait, parce que le chemin complet est toujours mis dans '{}' ... Ceci est la sortie avec echo: 'find/répertoire-de-sauvegarde/-maxdepth 1 -type f -mtime +14 -printf"% f \ n "-exec echo/dossier-de-sauvegarde/{} s3:/my-s3-bin/{} \; 20161030002947.Pg /backup-directory//backup-directory/20161030002947.Pg s3: // mon-s3-bin // répertoire-de-sauvegarde/20161030002947.Pg' – Sheldon

+0

Printf écrit sur stdout. cela n'affecte pas -exec. –