find 返回同一文件的两个行项目条目

gat*_*ack 0 find

命令:

find . ! -name '*153902*.json' -exec ls -nls {} + | sort -k 10
Run Code Online (Sandbox Code Playgroud)

返回:

12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 ./Flights20180506-151026_KSEA_300.json
12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 Flights20180506-151026_KSEA_300.json
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json
Run Code Online (Sandbox Code Playgroud)

此响应片段显示前两个行项目似乎表示同一个文件:不同之处在于文件名前有一个“./”。第一个 line-item 代表什么,为什么第三个 line item 没有 ./ ?

myname@Metropolitan:~/FlightAwareXML3/Thanksgiving18$ find . ! -name '*153902*.json' -exec ls -nlst {} \; | grep 153902_KATL_0
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json
Run Code Online (Sandbox Code Playgroud)

问题

  1. 谷歌了解./语法的独特关键字是什么?

  2. 是否有可能(如果是的话)用 ./

cuo*_*glm 6

这是过程:

find . ! -name '*153902*.json'
Run Code Online (Sandbox Code Playgroud)

将返回:

.
./Flights20180506-151026_KSEA_300.json
Run Code Online (Sandbox Code Playgroud)

然后exec执行:

ls -nls . ./Flights20180506-151026_KSEA_300.json
Run Code Online (Sandbox Code Playgroud)

这给你的内容.

12 -rw-rw-r-- 1 1000 1000  8359 May  6 15:11 Flights20180506-151026_KSEA_300.json
44 -rw-rw-r-- 1 1000 1000 40999 May  6 15:39 Flights20180506-153902_KATL_0.json
Run Code Online (Sandbox Code Playgroud)

./Flights20180506-151026_KSEA_300.json它自己。


./你的输出看,是串连路径的结果.与此匹配你的条件的文件名。POSIX 查找文档中描述了该行为:

每个路径操作数都应按原样进行评估,包括所有尾随字符;层次结构中遇到的其他文件的所有路径名应由当前路径操作数的串联组成,如果当前路径操作数不是以一个结尾,则是相对于路径操作数的文件名