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列出目录,而不是它们的内容