我正在尝试为 Android 手机上的各个文件夹编写文件计数脚本
在完美的世界中,以下内容应该有效
adb shell ls -l | wc -l /sdcard/dcim/Camera
在我看来,应该输出 ./sdcard/dcim/camera 的文件计数
但当然不是,而是说
The term 'wc' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling
of the name, or if a path was included, verify that the path is correct and try again.
At line:1 char:21
+ adb shell ls -l | wc <<<< -l /sdcard/dcim/Camera
+ CategoryInfo : ObjectNotFound: (wc:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
我可以adb shell ls -l /sdcard/dcim/Camera
还好
但是一旦我添加 | wc -l
部分损坏。
知道我在这里缺少什么吗?
注意:是的,我可以进入 shell,导航到该文件夹,然后从那里执行操作,但这不是我今天正在寻找的解决方案。
编辑:当我这样做时 adb shell "ls -l | wc -l" /sdcard/dcim/Camera
我明白了
wc: /sdcard/dcim/Camera: Is a directory
0 /sdcard/dcim/Camera
编辑2: 我无法在 Windows powershell 中运行 wc,但是,我可以在 androids shell 中运行它,所以
adb shell "ls -l | wc -l"
输出手机根目录中的文件计数,无需实际进入 shell。
但是,我还没有发现如何在子文件夹中执行此操作。
最佳答案
由于您在 Windows 上的 Power Shell 中工作,并且 Linux 实用程序 wc
不可用,因此一种可能的解决方案是执行以下操作:
- 从 here 下载 BusyBox 二进制文件,特别是 busybox-armv5 。
- 将 busybox 推送到手机并安装。
adb推送路径/to/busybox-armv5/data/local/tmp
adb shell chmod 755/data/local/tmp/busybox-armv5
adb shell/data/local/tmp/busybox-armv5 --install 。
- /data/local/tmp 目录中应该有一堆二进制文件。将
wc
拉到您的本地计算机。adb shell pull/data/local/tmp/wc/my/destination
现在您已经有了 wc
二进制文件,您可以通过执行以下操作在 Power Shell 脚本中将其用作资源:
- 在运行 adb 命令获取文件计数之前,请将
wc
二进制文件推送到/data/local/tmp。使其可执行。adb shell/path/to/wc/data/local/tmp/wc
adb shell chmod 755/data/local/tmp/wc
- 现在运行 adb 文件计数命令。
adb shell "ls -l/sdcard/dcim/Camera |/data/local/tmp/wc -l"
注意:在 ls
和 wc
命令周围加上引号将确保这两个命令都在设备上运行。如果引号不存在,则只会在设备上运行管道之前的命令,而 wc 命令将由 power shell 运行/解释。
关于bash - 如何在 android shell 中编写文件计数脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19175230/