如何在android shell中编写文件计数?

时间:2013-10-04 07:03:17

标签: bash adb

我正在尝试为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,但是,我可以在机器人shell中运行它,所以

adb shell "ls -l | wc -l"

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

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

2 个答案:

答案 0 :(得分:2)

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

  1. here下载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
  4. 现在您已拥有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"
    3. 注意:在lswc命令周围加上引号将确保在设备上运行这两个命令。如果引号不存在,则只有管道前的命令才会在设备上运行,而wc命令将由电源shell运行/解释。

答案 1 :(得分:0)

如果/system/bin/busybox存在,那么以下内容应该有效:

adb shell ls /sdcard/DCIM/Camera | busybox wc -l