使用-exec {}查找,有没有一种方法来计算总数?
我正在使用一个类似这样的命令:
find . -name "*.php" -exec chmod 755 {} \;
虽然,我不使用chmod,但我正在使用不同的命令,我不会在这里列出。 这个命令工作正常。 但是,有数以千计的文件和目录需要操作,这个操作需要一些时间。 我想知道是否有一种方式来显示操作完成时的某种总数? 也许是修改文件的计数?
我能想到的唯一的事情就是做一些事情:
find . -name "*.php" -exec chmod 755; echo "+"; {} \;
这会工作吗? 至less我们可以看到发生了一些事情…任何人都有更好的build议?
这工作:
$ find . -name "*.php" -exec chmod 755 {} \; -exec /bin/echo {} \; | wc -l
你必须包含第二个-exec /bin/echo
才能工作。 如果find
命令没有输出,那么wc
没有input来计算行数。
您可以使用一个find命令链接多个-exec
命令。 其语法是:
find . -exec cmd1 \; -exec cmd2 \; -exec cmd3 \;
在你的情况下,这将是这样的:
find . -name '*.php' -exec chmod 755 {} \; -exec echo '+' \;
虽然你有一些其他的select。 您可以将输出redirect到一个文件:
find . -name '*.php' -exec chmod 755 {} \; > logfile.txt
或者,您可以使用tee
,这将允许您将输出写入日志文件, 并仍然输出到屏幕。 我觉得这很有用,因为连续stream输出到屏幕让我知道命令仍在运行(不会崩溃或挂起),我仍然有日志文件以供参考。
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。
您可以在第一个命令之后执行其他命令,例如在这里打印一个点,并在最后对点进行计数。
你可以使用xargs和pv 。 可能是:
find . -name "*.php" | pv --line-mode | xargs chmod 755
注意:这只有在你的* .php文件的path或名称中没有空格或其他奇数字符时才会起作用。
使用-exec选项查找将为每个find的文件启动一个subprocess。 你可以使用像find . -name '*.php' | xargs chmod 755
这样的xargs来加快速度find . -name '*.php' | xargs chmod 755
find . -name '*.php' | xargs chmod 755
find . -name '*.php' | xargs chmod 755
– chmod只启动一次。