我从来没有能够完全理解find命令的-prune动作。但实际上,至少我的一些误解源于省略'-print'表达的效果。使用'-prune'时,将'-print'从'find'命令中省略掉
从“查找”手册页..
“如果表达式包含比其他-prune没有行动,是在该表达式为true的所有文件进行-print。”
..我一直以来(多年)都意味着我可以忽略'-print'。
但是,如以下示例所示,是至少在出现'-prune'表达式时使用'-print'和省略'-print'之间的区别。
首先,我有我的工作目录下的以下8个目录..
aqua/
aqua/blue/
blue/
blue/orange/
blue/red/
cyan/blue/
green/
green/yellow/
总共有10个文件中的8个目录..
aqua/blue/config.txt
aqua/config.txt
blue/config.txt
blue/orange/config.txt
blue/red/config.txt
cyan/blue/config.txt
green/config.txt
green/test.log
green/yellow/config.txt
green/yellow/test.log
我的目标是使用'查找'来显示文件路径中没有'蓝色'的所有常规文件。有五个文件符合这个要求。
可正常工作..
% find . -path '*blue*' -prune -o -type f -print
./green/test.log
./green/yellow/config.txt
./green/yellow/test.log
./green/config.txt
./aqua/config.txt
但当我离开了“-print”它不仅返回五个所需的文件,而且其路径名称中包含“蓝色”的任何目录..
% find . -path '*blue*' -prune -o -type f
./green/test.log
./green/yellow/config.txt
./green/yellow/test.log
./green/config.txt
./cyan/blue
./blue
./aqua/blue
./aqua/config.txt
那么为什么显示三个“蓝色”目录?
这可能很重要,因为我经常试图删除包含超过50,000个文件的目录结构。当处理该路径时,我的find命令,特别是如果我为每个文件执行'-exec grep',可能需要大量的时间来处理我完全不感兴趣的文件。我需要有信心,发现不会进入修剪结构。