Ответ 1
Это работает:
$ find . -name "*.php" -exec chmod 755 {} \; -exec /bin/echo {} \; | wc -l
Для этого вам нужно включить второй -exec /bin/echo
. Если команда find
не имеет выхода, то wc
не имеет ввода для подсчета строк для.
Я использую команду, подобную этой:
find . -name "*.php" -exec chmod 755 {} \;
Хотя я не использую chmod, я использую другую команду, которую я не буду перечислять здесь. Эта команда работает нормально. Тем не менее, есть тысячи файлов и каталогов, которые будут работать, и эта операция занимает некоторое время. Мне интересно, есть ли способ показать какую-то сумму при завершении операции? Возможно, количество измененных файлов?
Единственное, о чем я могу думать, это просто сделать что-то вроде:
find . -name "*.php" -exec chmod 755; echo "+"; {} \;
Будет ли это работать? По крайней мере, мы можем видеть, что что-то происходит... У кого-то есть лучшее предложение?
Это работает:
$ find . -name "*.php" -exec chmod 755 {} \; -exec /bin/echo {} \; | wc -l
Для этого вам нужно включить второй -exec /bin/echo
. Если команда find
не имеет выхода, то wc
не имеет ввода для подсчета строк для.
Вы можете связать несколько команд -exec
с помощью одной команды find. Синтаксис для этого:
find . -exec cmd1 \; -exec cmd2 \; -exec cmd3 \;
который в вашем случае будет выглядеть следующим образом:
find . -name '*.php' -exec chmod 755 {} \; -exec echo '+' \;
Хотя у вас есть еще несколько вариантов для этого. Вы можете перенаправить вывод в файл:
find . -name '*.php' -exec chmod 755 {} \; > logfile.txt
Или вы можете использовать tee
, что позволит вам записывать вывод в файл журнала и выводить на экран. Я считаю это полезным, поскольку непрерывный потоковый вывод на экран позволяет мне знать, что команда все еще работает (не разбилась или не зависала), и у меня все еще есть файл журнала, который будет ссылаться позже.
find . -name '*.php' -exec chmod 755 {} \; | tee logfile.txt
wc -l logfile.txt // prints the lines in the file
grep -c '^+$' logfile.txt // prints the lines containing a single '+'
find . -name "*.php" -exec chmod 755 {} + -printf '.' | wc -c
Если вы используете + вместо ";", find попытается обработать chmod 755 на многих файлах параллельно.
Вы можете выполнять дополнительные команды после первого, здесь, например, распечатать точку и подсчитать точки в конце.
С помощью опции -exec find начнет подпроцесс для каждого найденного файла. Вы можете ускорить это, используя xargs как find . -name '*.php' | xargs chmod 755
- chmod запускается только один раз.
Вы можете использовать xargs и pv. Возможно:
find . -name "*.php" | pv --line-mode | xargs chmod 755
Примечание: это будет работать, только если ваши *.php файлы не имеют пробелов или других нечетных символов в пути или имени.