2

我正在尝试为 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

EDIT2:我不能在 windows powershell 中运行 wc,但是,我可以在 androids shell 中运行它,所以

adb shell "ls -l | wc -l"

在手机根目录中输出文件计数,而无需实际进入 shell。

但是,我还没有发现如何在子文件夹中执行此操作。

4

2 回答 2

2

由于您在 Windows 上的 Power Shell 中工作并且 linux 实用程序wc不可用,因此一种可能的解决方案是执行以下操作:

  1. 从此处下载 BusyBox 二进制文件,特别是 busybox-armv5 。
  2. 将busybox推送到手机并安装。
    • adb push path/to/busybox-armv5 /data/local/tmp
    • adb shell chmod 755 /data/local/tmp/busybox-armv5
    • adb shell /data/local/tmp/busybox-armv5 --install .
  3. /data/local/tmp 目录中应该有一堆二进制文件。拉到wc您的本地机器。
    • adb shell pull /data/local/tmp/wc /my/destination

现在您有了wc二进制文件,您可以通过执行以下操作在 Power Shell 脚本中将其用作资源:

  1. 在运行 adb 命令以获取文件计数之前,将wc二进制文件推送到 /data/local/tmp。使其可执行。
    • adb shell /path/to/wc /data/local/tmp/wc
    • adb shell chmod 755 /data/local/tmp/wc
  2. 现在运行您的 adb 文件计数命令。
    • adb shell "ls -l /sdcard/dcim/Camera | /data/local/tmp/wc -l"

ls注意:在and命令周围加上引号wc将确保两个命令都在设备上运行。如果引号不存在,则只会在设备上运行管道之前的命令,而wc命令将由 power shell 运行/解释。

于 2013-10-05T01:23:49.317 回答
0

如果/system/bin/busybox存在,那么以下应该工作:

adb shell ls /sdcard/DCIM/Camera | busybox wc -l
于 2016-01-09T13:36:39.973 回答