find -prune:为什么 -print0 会影响搜索结果?

find -prune:为什么 -print0 会影响搜索结果?

设想:

$ 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,则打印它,并使用空终止符”。

相关内容