根据man find
:
-ls
True;列出当前文件ls -dils标准输出格式。块计数为 1K 块,除非设置了环境变量 POSIXLY_CORRECT,在这种情况下使用 512 字节块。请参阅不寻常的文件名部分以获取有关如何处理文件名中不寻常字符的信息。
我不明白这个ls -dils
部分。
man ls
有“-d 列出目录本身,而不是其内容”。
考虑一个包含三个 .png 文件的文件夹:
$ ls
01-default.png 02-jungle.png 03-snow.png
$
我明白了
$ find . -type f -ls
12983011 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 ./01-default.png
12982994 24 -rw-rw-r-- 1 dkb dkb 21857 Mar 10 17:28 ./03-snow.png
12983031 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 ./02-jungle.png
$
但是,如果-ls
平均值与 相同ls -dils
,我应该看到类似的结果,ls -dils
但我得到的只是
$ ls -dils
13631944 4 drwxrwxr-x 2 dkb dkb 4096 Aug 30 21:22 .
$
然而,ls -ils
更像是我用过的find
东西-ls
:
$ ls -ils
total 80
12983011 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 01-default.png
12983031 28 -rw-rw-r-- 1 dkb dkb 25964 Mar 10 17:28 02-jungle.png
12982994 24 -rw-rw-r-- 1 dkb dkb 21857 Mar 10 17:28 03-snow.png
$
所以我想知道该man find
页面中是否存在拼写错误,以及是否ls -dils
真的应该出现ls ils
在我问题顶部引用的部分中。
答案1
对于找到的每个文件,find
带有-ls
操作的命令显示那个文件格式类似于此命令将显示的内容,当您替换path
使用该文件的路径:
ls -dils path
这就是说,find
与-ls
运行许多命令类似,从...开始 ls -dils
,找到的每个文件对应一个。不是类似于运行没有路径参数的实际命令:
ls -dils
该命令在运行时不带路径参数时会表现出特殊行为:它的行为就像传递了ls
单个路径参数一样。您一直在比较该命令的行为与不带路径参数的命令的行为,但您应该将其行为与.
find
-ls
ls
ls
和路径参数。例如,尝试以下操作:
ls -dils ./*
(因为ls
对其输出进行排序,如下所述,更好的比较方法是对许多单独的命令进行排序,每个命令一个ls -dils ./filename
filename
。
对于这些特定文件,带 和不带 的输出相同-d
。但是,可以找到目录。您可以通过创建目录并尝试 和 来查看带 和不带 选项的命令之间find
的差异。例如:ls
-d
ls -dils ./*
ls -dils ./*
ek@Cord:~/tmp$ touch a b c
ek@Cord:~/tmp$ mkdir d
ek@Cord:~/tmp$ ls -dils ./*
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 ./d
ek@Cord:~/tmp$ ls -ils ./*
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
./d:
total 0
重申一个特别重要的观点:因为find
with-ls
类似于运行许多单独的命令ls -dils path
,它的行为与任何特定命令都不一样ls
。(它的行为有些类似于,其中ls -dils paths...
paths...
是找到的所有路径find
,但它也不完全类似于此,因为该ls
命令对其输出进行排序,因此结果通常会以不同的顺序出现。)
另一种方法是运行一个find
命令,其结果包括具有-ls
操作的目录,然后运行find
使用该-exec
操作的相应命令来运行ls
具有不同选项的实际命令。例如:
ek@Cord:~/tmp$ find . -ls
54043195528455285 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 .
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 ./d
ek@Cord:~/tmp$ find . -exec ls -dils {} \;
54043195528455285 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 .
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 ./d
ek@Cord:~/tmp$ find . -exec ls -ils {} \;
total 0
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 c
25051272927352243 0 drwxrwxrwx 1 ek ek 512 Aug 30 12:35 d
147774362773104141 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./a
71213169107810485 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./b
23080948090377031 0 -rw-rw-rw- 1 ek ek 0 Aug 30 12:35 ./c
total 0
-ls
在没有 - 的情况下运行的版本中,显示的、、和的d
第一个条目是a
b
c
d
第一的 ls
命令运行,路径为.
。要验证这一点,请尝试用 代替-ok
(-exec
它以交互方式运行,在每个命令之前提示您,因此可以清楚地了解哪些命令会产生哪些输出)。