1

我今天正在用 find 做一个脚本,在其中我(基本上)试图找到 png,然后在它们上使用 tesseract 并用序列号命名输出。我正在尝试按如下方式执行此操作。

#!/bin/bash
count=0
find /home/mine/Pictures -iname "*.png" -exec tesseract {} /home/mine/Temporary/test/$count \; -exec bash -c count=$((count+1)) \;

Tesseract 在这种情况下工作得很好,但我不能让我的计数变量增加,所以它只是保持为零。谁能帮我吗?

提前谢谢了。

4

1 回答 1

1

-exec将在新的 bash 进程中多次运行此 bash 命令。bash 变量仅在它们所属的 bash 进程内具有作用域。所以每次-exec启动另一个 bash 时,$count 都会从 0 重新开始。

我假设您只是想计算处理的文件数。我认为你可以这样做:

find /home/mine/Pictures -iname "*.png" -exec tesseract {} /home/mine/Temporary/test/$count -print | wc -l

这应该打印出在新行上找到的每个文件名。这个输出被传送到wc -l简单地计算行数的命令,即处理的文件数。

需要注意的是,如果您的文件名包含换行符,那么它们每个可能占用多行。但是谁在他们的文件名中添加了换行符呢?;-)

于 2013-10-02T01:14:23.997 回答