2015-10-30 1 views
2

J'essaye d'écrire un script bash qui décompile plusieurs fichiers .apk en utilisant apktool. Chaque fichier apk se trouve dans un sous-répertoire du dossier exemple.Exécution d'apktool dans un script bash

#!bin/bash 


for item in $(ls samples); 
do 
     for apk in $(ls "samples/$item"); 
     do 
      echo ./apktool/apktool d "./samples/$item$apk" 
      $(./apktool/apktool d "./samples/$item$apk") 
     done  
done 

Quand je lance le script que je reçois la sortie suivante:

./apktool/apktool d ./samples/ADRD/53dc.apk* 
Input file (./samples/ADRD/53dc.apk*) was not found or was not readable. 

Le fichier d'entrée message d'erreur est la norme quand apktool ne peut pas trouver un fichier. Cependant, si j'exécute la commande suivante dans le terminal, apktool fonctionnera correctement.

./apktool/apktool d ./samples/ADRD/53dc.apk* 

J'ai changé les permissions de tous les fichiers situés dans le dossier des échantillons en rw pour tous les utilisateurs. J'ai également essayé d'utiliser sudo avec le script shell, mais cela provoque le blocage du script. Cependant, lorsque j'utilise sudo avec apktool dans la ligne de commande, il se bloque également. Par conséquent, je ne suis pas sûr si l'utilisation de sudo avec apktool est faisable.

Toute aide est appréciée, merci.

+0

Ce script est tellement cassé syntaxiquement et sémantiquement que je ne me soucie même pas de signaler toutes les erreurs et les pièges ... De toute façon, pourquoi as-tu un astérisque à la fin du nom de fichier? Est-ce vraiment là? – 4ae1e1

Répondre

2

Il semble donc que ls vous donne une sortie avec un astérisque * ajouté à la fin du nom de fichier apk, car le fichier est exécutable.

for apk in $(ls "samples/$item"); 

Ce n'est pas le comportement par défaut de ls, vous obtenez ce probablement parce que vous avez à crénelage lsls -F ou similaire. Pour contourner l'alias, réécrire la ligne de cette façon:

for apk in $(\ls "samples/$item"); 

Notez que le \ j'ai ajouté là-bas.

BTW, est-il normal qu'un fichier apk soit exécutable? Peut-être que vous pouvez supprimer le bit exécutable:

find samples -name '*.apk' -exec chmod -x {} \; 

Aussi, peut-être votre script peut être remplacé par celui-liner:

find samples -name '*.apk' -exec ./apktool/apktool d {} \; 

Rappelez-vous, ce n'est pas exactement la même chose, car il peut aller plus profond que deux répertoires. Si vous avez besoin de limiter la profondeur, c'est possible aussi, voir man find

+0

Merci! L'astérisque était à l'origine du problème. –