2013-10-02 2 views
1

Я делаю скрипт с поиском сегодня, в котором я (по существу) пытаюсь найти png, а затем использую tesseract на них и называю вывод серийным номером. Я пытаюсь сделать это, как показано ниже.Increment with Find -exec

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

Тессеракт прекрасно работает в этом контексте, но я не могу получить переменный подсчет для увеличения и поэтому он просто остается на нуле. Может кто-нибудь мне помочь?

Большое спасибо заранее.

ответ

1

-exec будет выполнять эту команду bash в новом процессе bash несколько раз. Переменные Bash имеют только область действия в процессе bash, к которому они принадлежат. Поэтому каждый раз, когда -exec запускает еще один баш, $ count перезагружается на 0.

Я предполагаю, что вы просто пытаетесь подсчитать количество обработанных файлов. Я думаю, что вы могли бы сделать это вместо этого:

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

Это должно распечатать каждое имя файла, найденное на новой строке. Этот вывод передается по каналу в команду wc -l, которая просто подсчитывает количество строк, т. Е. Количество обработанных файлов.

Предостережение заключается в том, что если ваши имена содержат символы новой строки, они могут занимать более одной строки. Но кто ставит символы новой строки в свои имена? ;-)