我正在尝试编写一个bash脚本,它使用apktool对几个.apk文件进行解压缩。每个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*对于所有用户,我已经将位于示例文件夹中的所有文件的权限更改为rw。我也尝试过在shell脚本中使用sudo,但这会导致脚本挂起。但是,当我在命令行中使用sudo时,apktool也会挂起。因此,我不确定使用sudo和apktool是否可行。
任何帮助都是非常感谢的,谢谢。
发布于 2015-10-31 07:45:23
因此,这个ls为您提供了一个在apk文件名末尾附加星号*的输出,因为该文件是可执行的。
for apk in $(ls "samples/$item");这不是ls的默认行为,可能是因为您将ls别名为ls -F或类似的。若要绕过别名,请用以下方式重写行:
for apk in $(\ls "samples/$item");注意我在那里添加的\
顺便说一下,apk文件是可执行的,这是正常的吗?也许您可以删除可执行位:
find samples -name '*.apk' -exec chmod -x {} \;另外,您的脚本可能会被以下一行替换:
find samples -name '*.apk' -exec ./apktool/apktool d {} \;请注意,这不是完全相同的事情,因为它可能比两个目录更深。如果您需要限制深度,这也是可能的,请参见man find
https://stackoverflow.com/questions/33444341
复制相似问题