Распечатать и обновить переменную внутри find

Распечатать и обновить переменную внутри find

Я хотел бы запустить findкоманду и обработать возвращаемые ею файлы, а также вывести на экран количество обработанных файлов по мере ее выполнения, чтобы иметь представление о ходе выполнения.

Прямо сейчас моя команда (в качестве примера) такова:

COUNT=0\; find . -name '*.*' -exec echo "$COUNT: \c" \; -exec echo {} \;

Но в результате я не получаю счетчик для echo (и не могу понять, как его увеличить). Я бы хотел, чтобы он выдал мне что-то вроде:

0: ./FileOne.txt
1: ./FileTwo.txt
...
205: ./FileTwoHundredAndFive.txt

решение1

Команды, выполняемые с помощью, findнезависимы. Каждая -execзапускает новую команду. Нет способа передать текущий счетчик из одной команды в другую, кроме как сохранить его где-то (в файле), что было бы очень медленно.

Вы можете заставить find печатать что-то каждый раз, когда он видит файл, и передать вывод в программу, которая подсчитывает входные строки.

find … -print -exec 'the stuff you want to do' | nl

Это выведет счетчики после задержки из-за буферизации. СмотритеОтключить буферизацию в каналепри отключении буферизации.

stdbuf -oL -eL find … -print -exec 'the stuff you want to do' | nl

Связанный контент