查找 和有什么不一样?并找到 . -打印

查找 和有什么不一样?并找到 . -打印

有什么区别:

find .

find . -print

实际上是做什么的-print

$ find .
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt
$ find . -print
.
./hello.txt
./hello
./hello/txt
./hello/hello2
./hello/hello2/hello3
./hello/hello2/hello3/txt
./hello/hello2/txt

答案1

来自findutils find联机帮助页:

如果没有给出表达式,则表达式-print使用(但你可能应该考虑使用-print0相反,无论如何)。

(-print是一个find表达.)

POSIX 文档证实了这一点:

如果不表达存在,-打印应用作表达式。

所以find .完全等同于find . -print;第一个没有表达式,因此-print在内部添加。

-print联机帮助页中进一步解释了其含义:

-print

真的;在标准输出上打印完整的文件名,后跟换行符。如果您将 find 的输出通过管道传输到另一个程序中,并且您正在搜索的文件极有可能包含换行符,那么您应该认真考虑使用-print0选项而不是-print。有关如何处理文件名中的异常字符的信息,请参阅异常文件名部分。

答案2

-print是默认值行动。一些find谓词被认为是行动相对于过滤器或者状况。例如,-type f不是一个动作。-exec是一个动作,尽管它也可以用作条件。

行动包括-print-exec-ok。某些find实现具有其他非标准操作谓词,例如-print0, -printf, -execdir, -okdir, -ls...

find files <some-predicates>

其中没有一个<some-predicates>包含行动相当于:

find files \( <some-predicates> \) -print

(注意上面的括号,如果有一些-o运算符,这很重要)。

如有疑问,最好是-print显式使用(或-exec printf '%s\0' {} +(或-print0在可用的情况下)以便可以对输出进行后处理)。

默认-print操作由 POSIX 指定。一些旧的find实现需要显式的-print,但如今在野外通常找不到这些。

另请注意,某些find实现允许省略files,在这种情况下,它们默认搜索当前目录。也就是说,对于他们来说,

find
find -print

相当于

find .
find . -print

然而,这不是标准的,所以最好避免。

在更详细(且有用)的范围内,某些find实现还允许将文件路径作为参数传递给-f选项,如下所示:

find -f "$file1" -f "$file2" -print

它们是唯一find允许将任意文件路径传递到find.其他实现不能接受像!or -print... 这样的文件路径,所以find "$file" -print(甚至find -- "$file" -print) 假设不是谓词(或第一种情况下的选项)$file的名称。find

不幸的是,这既不标准也不便携。

答案3

它们是相同的,它们都从当前目录写出整个目录层次结构。

POSIX 查找文档:

以下命令是等效的:

寻找 。

寻找 。 -打印

答案4

多年来,find 命令没有默认操作。一个常见的错误是忘记将 -print 选项添加到 find 命令中。直到今天我仍然习惯性地打字。

但在某些时候它被添加为默认操作,因此现在find .find . -print是等效的。

相关内容