命令:
find . ! -name '*153902*.json' -exec ls -nls {} + | sort -k 10
返回:
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
响应的这段代码显示前两个行项目似乎代表同一个文件:区别在于文件名前面有一个“./”。第一个行项目代表什么?为什么第三个行项目没有 ./ ?
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
问题
通过 Google 来了解更多 ./ 语法的独特关键字是什么?
是否有可能(如果是的话如何)用 ./ 消除第一行项目响应
答案1
过程如下:
find . ! -name '*153902*.json'
将返回:
.
./Flights20180506-151026_KSEA_300.json
然后exec
执行:
ls -nls . ./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
和./Flights20180506-151026_KSEA_300.json
它本身。
您在输出中看到的是将路径与符合您的条件的文件名./
连接起来的结果。.
该行为描述于POSIX 查找文档:
每个路径操作数应在提供时按原样进行评估,包括所有尾随字符;层次结构中遇到的其他文件的所有路径名应由当前路径操作数、a(如果当前路径操作数不以 1 结尾)和相对于路径操作数的文件名的串联组成
答案2
当查找带有 的常规文件时find
,请确保使用-type f
:
find . -type f ! -name '*153902*.json'
这样,您就可以避免匹配目录名称,特别是.
在这种情况下。