使用-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只启动一次。