Script de shell para trabalhar em arquivos em algum diretório

0

Eu tenho um sistema Windows, então baixei o cygwin para me ajudar a executar comandos Linux / unix. Eu preciso executar um script de shell em um monte de apks armazenados dentro de uma pasta (tenho o script aqui ).

Este é o script:

#!/bin/bash
cd $1

for filename in *.apk
do
    unzip -d $filename.extract $filename META-INF/CERT.RSA
    if [ -f $filename.extract/META-INF/CERT.RSA ]
        then
        mkdir 'keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep SerialNumber| cut -c 19-23'
        mv $filename 'keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep SerialNumber| cut -c 19-23'/$filename
        mv 'echo $filename | sed 's/\(.*\.\)apk/odex/'' 'keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep SerialNumber| cut -c 19-23'/'echo $filename | sed 's/\(.*\.\)apk/odex/''
        rm -rf $filename.extract
    else
        mkdir none
        mv $filename none
        mv 'echo $filename | sed 's/\(.*\.\)apk/odex/'' none
        rm -rf $filename.extract
    fi
done;

mkdir other
mv * other
mv other/b399 platform
mv other/f2a7 shared
mv other/f2b9 media
mv other/936e test

No terminal, eu executo o comando sh cert.sh , mas recebo o erro abaixo:

Estranhamente, quando executo cert.sh - , o script é executado e separa meus apks em pastas diferentes, mas não tenho certeza se ele é executado corretamente, pois o comando adequado para executar um script de shell é sh cert.sh .

    
por Basher51 08.08.2014 / 04:33

2 respostas

2

O script espera um argumento quando é executado. Este argumento é o diretório em que *.apk reside.

O argumento é chamado no script por cd $1 line, é assim que os argumentos são chamados no shell script.

Tente executar novamente seu script da seguinte maneira: sh cert.sh </path/where/apks/reside> e ver se isso resolve o problema?

Além disso, antes de for loop, adicione rm -rf other e rm -rf none lines para remover os erros relacionados às pastas existentes.

    
por 08.08.2014 / 05:17
0

O script está sendo executado corretamente. Não produziria todos esses erros se não fosse.

Você tem os seguintes problemas:

1) Não existem arquivos com o sufixo .apk em seu diretório ... \ test1 e seu script não foi escrito para lidar com esse tipo de erro. Idem para * .odex.

2_ O script espera poder criar os diretórios none e other , mas eles já existem (e parecem ser arquivos em vez de diretórios) e não sabem como lidar com isso, por isso gera um erro.

Os demais erros estão relacionados ao acima.

Sugestões:

1) Se você não tiver arquivos * .apk, então comente toda a declaração if . Caso contrário, vá para o diretório que os contém.

2) Remova os arquivos none e other se eles não forem necessários. Se eles permanecerem como arquivos, seu script nunca criará esses diretórios.

    
por 08.08.2014 / 04:54