设想:
$ tree .
.
├── x1.txt
├── x2.txt
└── x3.txt
0 directories, 3 files
$ find . -name "x1.txt" -prune -o -name "*.txt"
./x1.txt
./x2.txt
./x3.txt
$ find . -name "x1.txt" -prune -o -name "*.txt" -print0
./x2.txt./x3.txt
在这里我们看到这-print0
确实会影响搜索结果。使困惑。
为什么存在-print0
导致find ...
不打印x1.txt
?
为什么-print0
没有find ...
打印x1.txt
?
答案1
find
的默认操作(当除了-prune
或之外没有-quit
指定任何操作时使用)是-print
;在
find . -name "x1.txt" -prune -o -name "*.txt"
-print
在所有情况下都隐含着:
find . -name "x1.txt" -prune -print -o -name "*.txt" -print
或者更准确地说,
find . \( -name "x1.txt" -prune -o -name "*.txt" \) -print
添加-print0
会删除默认值,因此
find . -name "x1.txt" -prune -o -name "*.txt" -print0
意思是“如果名称匹配x1.txt
,则修剪它;否则,如果匹配*.txt
,则打印它,并使用空终止符”。