如何从 Linux 的“locate”命令显示文件详细信息(大小、日期等)?

Dav*_*ton 8 linux ls locate find

(慢)Linux“find”命令有一个选项“-ls”,可以像“ls -l”命令一样显示大小、日期等。但是“locate”命令似乎没有。那么我怎样才能获得与 locate 相同的功能呢?

我使用反引号将 locate 的输出传递给 ls,如下所示:

ls -al `locate -e somefile`
Run Code Online (Sandbox Code Playgroud)

...只要 somefile 存在,它就可以工作。但是如果 somefile 不存在,它会给我一个完整的目录列表。

如果我这样做:

ls -al `locate -e somefile` thisfileneverexists
Run Code Online (Sandbox Code Playgroud)

...然后它有点工作,如果你不介意错误行:

ls: cannot access thisfileneverexists: No such file or directory
Run Code Online (Sandbox Code Playgroud)

……这让我们想到了明显但极其丑陋的解决方法:

ls -al `locate -e somefile` thisfileneverexists 2>/dev/nul
Run Code Online (Sandbox Code Playgroud)

那行得通,但肯定有更好的方法!

Pau*_*aul 12

使用xargs. 这将一系列参数作为输入,并对它们执行操作:

 locate -eb0P somefile | xargs -r0 ls -ald
Run Code Online (Sandbox Code Playgroud)

xargs 将ls -ald使用 locate 的结果作为参数来执行命令。

-e开关告诉 locate 检查在数据库中找到的文件是否确实存在,并忽略任何不存在的文件。

-b开关告诉找到匹配只是基本名称。

-0(零)开关告诉定位产生无效的分隔符,而不是空格(所以它可以处理包含空格的文件名)

-P开关告诉定位到列表断符号链接

-r开关告诉xargs的,如果没有被传递给不执行命令-即当找到返回任何内容。

-0开关告诉 xargs 期望空值而不是空格作为分隔符

-a开关告诉 ls 列出以“.”开头的文件。

-d开关告诉ls列出目录,而不是它们的内容