我想使用 find 命令搜索一个目录中的所有文件:
find . * -exec ll {} \;
结果显示每个文件有四个 (!) 结果:
file123./test/file123file123test/file123是否可以./test/file123使用 find-out-of-the-box-command仅显示第二个结果(因此不使用诸如 之类的东西| grep '^\./')?
我正在使用最新版本的 HP/UX。
您将获得四行输出,因为您要求find搜索当前目录 ( .) 以及*扩展到的所有内容。
对于当前目录,find将继续调用ll它找到的东西,即当前目录、test目录和目录中的文件test。这列出了file123两次。
然后它将搜索*扩展到的所有内容,这将是test目录。现在它将再次使用llontest并在其中的文件上使用。这将再次列出您的文件两次。
相反,如果您要查找常规文件,请使用-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/file123and调用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)