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

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

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

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

ls -al `locate -e somefile`

…只要 somefile 存在,它就会起作用。但如果 somefile 不存在,它会给我一个完整的目录列表。

如果我这样做:

ls -al `locate -e somefile` thisfileneverexists

...那么它就可以工作了,如果你不介意错误行的话:

ls: cannot access thisfileneverexists: No such file or directory

…这让我们想到了一个显而易见但极其丑陋的解决方法:

ls -al `locate -e somefile` thisfileneverexists 2>/dev/nul

这可行,但肯定有更好的方法!

答案1

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

 locate -eb0P somefile | xargs -r0 ls -ald

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

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

-b开关告诉定位仅匹配基本名称。

(零)开关-0告诉locate生成空分隔符而不是空格(因此它可以处理包含空格的文件名)

-P开关告诉locate列出损坏的符号链接

-r开关告诉 xargs,如果没有传入任何内容(即,当locate没有返回任何内容)则不要执行该命令。

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

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

-d开关告诉 ls 列出目录而不是其内容

答案2

将结果存储locate在变量中,检查它是否有任何值,然后查看。

f=`locate ...`
[ "$f" ] && ls -al "$f"

您无法locate直接获取此信息的原因是它不在使用的数据库中locate

答案3

您还可以循环输出locate

locate somefile | while IFS= read -r i; do ls -la "$i"; done

相关内容