问题

问题

命令:

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

问题

  1. 通过 Google 来了解更多 ./ 语法的独特关键字是什么?

  2. 是否有可能(如果是的话如何)用 ./ 消除第一行项目响应

答案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'

这样,您就可以避免匹配目录名称,特别是.在这种情况下。

相关内容