我正在尝试编写一个使用apktool反编译几个.apk文件的bash脚本。每个apk文件都位于示例文件夹的子目录中。
#!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
当我运行脚本时,我得到以下输出:
./apktool/apktool d ./samples/ADRD/53dc.apk*
Input file (./samples/ADRD/53dc.apk*) was not found or was not readable.
输入文件错误消息是apktool无法找到文件时的标准。但是,如果我在终端中运行以下命令,apktool将正常工作。
./apktool/apktool d ./samples/ADRD/53dc.apk*
我已将samples文件夹中所有文件的权限更改为所有用户的rw。我也尝试过使用sudo和shell脚本,但是这会导致脚本挂起。但是,当我在命令行中使用带有apktool的sudo时,它也会挂起。因此,我不确定使用带有apktool的sudo是否可行。
感谢任何帮助,谢谢。
答案 0 :(得分:2)
所以看起来这个ls
给你一个带有星号*的输出,附加在apk文件的末尾,因为该文件是可执行的。
for apk in $(ls "samples/$item");
这不是ls
的默认行为,您可能是因为您有ls
别名ls -F
或类似名称。要绕过别名,请以这种方式重写行:
for apk in $(\ls "samples/$item");
注意\我在那里添加了。
BTW,apk文件是可执行的,这是正常的吗?也许你可以删除可执行位:find samples -name '*.apk' -exec chmod -x {} \;
此外,您的脚本可能会替换为这一个内容:
find samples -name '*.apk' -exec ./apktool/apktool d {} \;
请注意,这不完全相同,因为它可能比两个目录更深入。如果您需要限制深度,也可以这样做,请参阅man find