我正在使用与此类似的命令:
find . -name "*.php" -exec chmod 755 {} \;
虽然,我没有使用chmod,但我使用的是另一个命令,我不会在这里列出。这个命令工作正常。但是,有数千个文件和目录要操作,这个操作需要一些时间。我想知道在操作完成时是否有办法显示某种总数?也许修改了一些文件?
我唯一能想到的就是做一些事情:
find . -name "*.php" -exec chmod 755; echo "+"; {} \;
那会有用吗?至少我们可以看到正在发生的事情......任何人都有更好的建议吗?
答案 0 :(得分:34)
这有效:
$ find . -name "*.php" -exec chmod 755 {} \; -exec /bin/echo {} \; | wc -l
您必须包含第二个-exec /bin/echo
才能生效。如果find
命令没有输出,则wc
没有输入来计算行数。
答案 1 :(得分:9)
您可以使用单个find命令链接多个-exec
命令。其语法是:
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 '+'
答案 2 :(得分:2)
find . -name "*.php" -exec chmod 755 {} + -printf '.' | wc -c
如果使用+而不是“;”,find将尝试并行处理许多文件上的chmod 755。
您可以在第一个之后执行其他命令,例如打印一个点,然后计算最后的点。
答案 3 :(得分:0)
使用-exec选项,find将为找到的每个文件启动一个子进程。您可以使用像find . -name '*.php' | xargs chmod 755
这样的xargs加快速度 - chmod只启动一次。
答案 4 :(得分:0)