저는 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
스크립트를 실행할 때 하나의 매개변수가 필요합니다. 이 매개변수는 해당 매개변수가 위치한 디렉토리입니다 *.apk
.
매개변수는 스크립트에서 한 줄씩 호출되며 cd $1
, 이는 쉘 스크립트에서 매개변수가 호출되는 방식입니다.
다음과 같이 스크립트를 다시 실행해 보십시오. sh cert.sh </path/where/apks/reside>
문제가 해결되는지 확인하시겠습니까?
또한 기존 폴더와 관련된 오류를 제거하려면 루프 앞에 및 줄을 for
추가하세요 .rm -rf other
rm -rf none
답변2
스크립트가 정상적으로 실행됩니다. 그렇지 않은 경우에는 이러한 오류가 모두 생성되지 않습니다.
다음과 같은 질문이 있습니다.
1) ...\test1 디렉토리에 .apk 접미사가 있는 파일이 없으며 스크립트가 이러한 오류를 처리하도록 작성되지 않았습니다. *.odex도 마찬가지입니다.
2_ 스크립트는 none
및 디렉토리를 생성할 수 있을 것으로 예상 other
하지만 이미 존재하며(디렉토리가 아닌 파일인 것처럼 보임) 이를 어떻게 처리할지 모르므로 오류를 인쇄합니다.
나머지 오류는 위와 관련이 있습니다.
제안:
1) *.apk 파일이 없으면 전체 if
문장을 주석 처리하세요. 그렇지 않으면 해당 항목이 포함된 디렉터리로 이동합니다.
none
2) 불필요한 other
파일을 삭제하세요. 파일로 남아 있으면 스크립트는 이러한 디렉터리를 생성하지 않습니다.