我想使用 find 命令搜索一个目录中的所有文件:
find . * -exec ll {} \;
结果显示每个文件有四个 (!) 结果:
file123
./test/file123
file123
test/file123
是否可以./test/file123
使用 find-out-of-the-box-command仅显示第二个结果(因此不使用诸如 之类的东西| grep '^\./'
)?
我正在使用最新版本的 HP/UX。
您将获得四行输出,因为您要求find
搜索当前目录 ( .
) 以及*
扩展到的所有内容。
对于当前目录,find
将继续调用ll
它找到的东西,即当前目录、test
目录和目录中的文件test
。这列出了file123
两次。
然后它将搜索*
扩展到的所有内容,这将是test
目录。现在它将再次使用ll
ontest
并在其中的文件上使用。这将再次列出您的文件两次。
相反,如果您要查找常规文件,请使用-type f
. 并且您不必使用ll
(或ls
) 来获取结果,find
因为它默认会列出找到的路径名。另外,只需find
将当前目录(或test
)作为搜索路径:
find . -type f
Run Code Online (Sandbox Code Playgroud)
如果您知道要查找具有确切名称的文件file123
:
find . -type f -name 'file123'
Run Code Online (Sandbox Code Playgroud)
如果你想要ls -l
-like 输出而不是路径名:
find . -type f -name 'file123' -ls
Run Code Online (Sandbox Code Playgroud)
find . * -exec ll {} \;
Run Code Online (Sandbox Code Playgroud)
通行证.
,并在当前目录(从扩展的非隐藏文件的列表*
由壳),包括test
子目录(如果有任何开始与这些文件的-
,或者如果有一个名为!
或者(
,)
...这将导致find
到报告语法错误)。
所以,你告诉find
查找文件的递归.
,但也test
。所以find
会发现test
两次,也test/file123
两次。
ll
我想这是一个脚本,它ls -l
是一个工具,用于列出文件的详细信息或目录类型的文件,该目录中所有文件的详细信息(除非您通过该-d
选项)。
Soll
将使用./test
和test
作为参数调用,在这种情况下, if 将在其内容(包括test/file
)中列出文件的详细信息。
它将用./test/file123
and调用test/file123
。
在这里,你会想要:
find . -exec ls -ld {} +
Run Code Online (Sandbox Code Playgroud)
(使用+
意味着将多个文件作为参数传递给ls
它,这样效率更高,并且还可以ls
对文件列表进行排序)。
您find
甚至可能支持一个-ls
行为有点列表的谓词ls -lsid
:
find . -ls
Run Code Online (Sandbox Code Playgroud)