我正在尝试为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。
但是,我还没有发现如何在子文件夹中执行此操作。
答案 0 :(得分:2)
由于您在Windows上的Power Shell中工作并且Linux实用程序wc
不可用,因此一种可能的解决方案是执行以下操作:
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 .
wc
拉到本地计算机。
adb shell pull /data/local/tmp/wc /my/destination
现在您已拥有wc
二进制文件,您可以通过执行以下操作在Power Shell脚本中将其用作资源:
wc
二进制文件推送到/ data / local / tmp。让它可执行。
adb shell /path/to/wc /data/local/tmp/wc
adb shell chmod 755 /data/local/tmp/wc
adb shell "ls -l /sdcard/dcim/Camera | /data/local/tmp/wc -l"
注意:在ls
和wc
命令周围加上引号将确保在设备上运行这两个命令。如果引号不存在,则只有管道前的命令才会在设备上运行,而wc
命令将由电源shell运行/解释。
答案 1 :(得分:0)
如果/system/bin/busybox
存在,那么以下内容应该有效:
adb shell ls /sdcard/DCIM/Camera | busybox wc -l