eth*_*pil 35 unix linux bash find
我正在使用类似于这个的命令:
find . -name "*.php" -exec chmod 755 {} \;
Run Code Online (Sandbox Code Playgroud)
虽然,我没有使用chmod,但我使用的是另一个命令,我不会在这里列出.这个命令工作正常.但是,有数千个文件和目录要操作,这个操作需要一些时间.我想知道在操作完成时是否有办法显示某种总数?也许是修改过的文件?
我唯一能想到的就是做一些像:
find . -name "*.php" -exec chmod 755; echo "+"; {} \;
Run Code Online (Sandbox Code Playgroud)
那会有用吗?至少我们可以看到事情正在发生......任何人都有更好的建议吗?
Dav*_* W. 34
这有效:
$ find . -name "*.php" -exec chmod 755 {} \; -exec /bin/echo {} \; | wc -l
Run Code Online (Sandbox Code Playgroud)
您必须包含一秒-exec /bin/echo
才能使用此功能.如果find
命令没有输出,则wc
没有输入来计算行数.
您可以-exec
使用单个find命令链接多个命令.其语法是:
find . -exec cmd1 \; -exec cmd2 \; -exec cmd3 \;
Run Code Online (Sandbox Code Playgroud)
在你的情况下,这将是这样的:
find . -name '*.php' -exec chmod 755 {} \; -exec echo '+' \;
Run Code Online (Sandbox Code Playgroud)
虽然你有其他一些选择.您可以将输出重定向到文件:
find . -name '*.php' -exec chmod 755 {} \; > logfile.txt
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用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 '+'
Run Code Online (Sandbox Code Playgroud)