ディレクトリ内のファイルを処理するためのシェルスクリプト

ディレクトリ内のファイルを処理するためのシェルスクリプト

私はWindowsシステムを使用しているので、Linux / unixコマンドを実行するのに役立つcygwinをダウンロードしました。シェルスクリプト(スクリプトのインポート)を実行する必要があります。ここ)。

スクリプトは次のとおりです。

#!/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/\1odex/'` `keytool -printcert -v -file $filename.extract/META-INF/CERT.RSA|grep SerialNumber| cut -c 19-23`/`echo $filename | sed 's/\(.*\.\)apk/\1odex/'`
        rm -rf $filename.extract
    else
        mkdir none
        mv $filename none
        mv `echo $filename | sed 's/\(.*\.\)apk/\1odex/'` 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

端末でコマンドを実行しましたが、sh cert.sh次のエラーが発生します。

ここに画像の説明を入力してください。

奇妙なことは、cert.sh -スクリプトを実行するとapkが実行されて別のフォルダに分割されますが、シェルスクリプトを実行する正しいコマンドがあるため、正しく実行されるかどうかはわかりませんsh cert.sh

答え1

スクリプトを実行するには1つのパラメータが必要です。このパラメータは、そのパラメータが配置されているディレクトリです*.apk

パラメータはスクリプトから1行ずつ呼び出されcd $1、これはシェルスクリプトでパラメータが呼び出される方法です。

次のようにスクリプトを再実行してみてください。sh cert.sh </path/where/apks/reside>問題が解決するかどうか確認しますか?

また、既存のフォルダに関連するエラーを削除するには、ループの前に行をfor追加してください。rm -rf otherrm -rf none

答え2

スクリプトは正常に実行されます。それ以外の場合、これらのエラーはすべて生成されません。

次の質問があります。

1) ...\test1 ディレクトリに .apk サフィックスがあるファイルがなく、スクリプトがこれらのエラーを処理するように作成されていません。 *.odexも同様です。

2_スクリプトはnoneディレクトリを作成できると予想していますotherが、すでに存在し(ディレクトリではなくファイルのように見えます)、それを処理する方法がわからないため、エラーを印刷します。

残りのエラーは上記に関連しています。

提案:

1) *.apk ファイルがない場合は、if文全体をコメントアウトしてください。それ以外の場合は、そのエントリを含むディレクトリに移動します。

none2) 不要なotherファイルを削除してください。ファイルが残っている場合、スクリプトはこれらのディレクトリを生成しません。

関連情報