2017-07-19 5 views
0

Je cherche à utiliser trouver et exec pour traiter les fichiers et que vous voulez appeler un script shell, mais ne peut pas à comprendre comment passer des variables à ce script:passage de paramètres pour trouver le script

DIR_TEMP='/tmp' 
NAME='foo' 
TARGET='/tmp/target' 
find . -type f -name \*.ko.gz -exec /bin/sh -c ${DIR_TEMP}/${NAME}.sort "$TARGET" {} \; 

Contenu de /tmp/foo.sort

#!/bin/sh 
echo "called, 0 :$0:, 1 :$1:, 2 :$2:" >> /tmp/debug.txt 

Tout ce que je semble obtenir est:

called, 0 :/tmp/foo.sort:, 1 ::, 2 :: 

Toute aide serait appréciée!

Répondre

0

L'option -c prend un seul argument, donc au lieu de

/bin/sh -c ${DIR_TEMP}/${NAME}.sort "$TARGET" {} 

faire

/bin/sh -c "$DIR_TEMP/$NAME.sort $TARGET '{}'" 
+0

qui semble avoir résolu le problème, merci Glenn! – user1646428

+1

Cela peut être une préoccupation purement théorique, mais certaines implémentations de find ne permettront pas d'utiliser {} de cette façon. Pour ceux-là, vous pouvez faire 'find ... -exec/bin/sh -c" $ DIR_TEMP/$ NAME.sort $ TARGET \ "$ 1 \" "_ {} \;' –

+0

Un bon William. Vous devriez échapper '\ $ 1' pour le protéger –