bash - 如何在 android shell 中编写文件计数脚本?

标签 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

编辑2: 我无法在 Windows powershell 中运行 wc,但是,我可以在 androids shell 中运行它,所以

adb shell "ls -l | wc -l"

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

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

最佳答案

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

  1. here 下载 BusyBox 二进制文件,特别是 busybox-armv5 。
  2. 将 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 。
  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"

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

关于bash - 如何在 android shell 中编写文件计数脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19175230/

相关文章:

java - 如何为java进程创建PID文件

linux - cat pipe awk 操作与文件上 awk 命令的比较

android - ADB root 无法在模拟器上运行(无法在生产版本中以 root 身份运行)

android - ADB(但不​​是通过 Eclipse)通过 USB 找到我的 Android 设备

android - ADB 指纹命令卡住

android - adb screenrecord 命令在我的 Android TV 上不起作用

macos - bash: 导出: `=' : 不是有效的标识符 -bash: 导出: `=' : 不是有效的标识符

linux - 重命名每个组中的最新文件

linux - 对两个字段进行排序。我想主要按字段 1 对文件进行排序,其次按字段 2(第二个字段需要按字典顺序排序)

android - 如何从 adb 启动 Airdroid 网络服务器?