Linux 结合find和ls

Linux 结合find和ls,linux,bash,shell,grep,find,Linux,Bash,Shell,Grep,Find,我试图在LS输出上使用find或grep 目前,ls-l正在打印大量信息。但我只希望用户与文件名关联。文件名可能会变为灰色使用带有-printf标志的find: find . -name "a*" -printf "%u %f\n" find . -name "M*" -printf "%u %f\n" 从人工查找: -printf格式 %u文件的用户名,如果用户没有名称,则为数字用户ID %删除任何前导目录的f文件名(仅最后一个元素) 考虑添加一个perl oneliner,如下所示: ll

我试图在LS输出上使用find或grep


目前,ls-l正在打印大量信息。但我只希望用户与文件名关联。文件名可能会变为灰色

使用带有
-printf
标志的
find

find . -name "a*" -printf "%u %f\n"
find . -name "M*" -printf "%u %f\n"
人工查找

-printf格式

%u文件的用户名,如果用户没有名称,则为数字用户ID

%删除任何前导目录的f文件名(仅最后一个元素)


考虑添加一个perl oneliner,如下所示:

ll | grep user_u | perl -lane 'print "$F[2] $F[8]"'

-lane allow使用空格作为分隔符对输出进行切片,$F[2]和$F[8]是感兴趣的切片(第一个切片是$F[0])

我自己找到了答案,但我的方法似乎更复杂。 我使用的是:

tr -s ' ' | cut -d ' ' -f3,9 | grep " $1.*"  
但是你的看起来不错。问题是

find . -name "M*" -printf "%u %f\n"

还显示.git文件。我想这个话题已经解决了,谢谢你的考虑

大多数系统都提供了一个
stat
命令,它可以很容易地生成有关文件(或文件列表)的任何信息。不幸的是,
stat
命令没有标准化,选项集差别很大。有关更多信息,请阅读系统上的
man 1 stat

在Linux上,使用GNU stat,您可以使用

stat -c%U file...
在BSD(包括Mac OS X)上,您应该能够使用

stat -f%Su file ...

(如果您想要uid而不是用户名,您可以分别使用
-c%u
-f%u

那么,问题是什么?为什么
find
是相关的?我这样问是因为从你写的东西来看,这两个问题都不是很清楚。这听起来像是XY问题。你到底想实现什么?虽然我喜欢perl,但我还是建议-为什么不使用
File::Find
,更具体一点。我希望你能为我们提供一个使用此模块的一行程序。我的解决方案可以很容易地为每个格式化输出重用。您可以始终使用
awk
而不是
perl
。然后,您就不需要记住
-lane
选项的作用。同样。另外,建议使用别名(
ll
)也是一个禁忌。好吧,别名在非交互式shell(读:shell脚本)中不起作用。另外,您不知道将定义哪些别名。我已将别名ll='ls-alF'
设置为
ls-l
上存在
-printf
选项,但上缺少该选项。不过没关系,因为OP没有包含任何
Mac os
相关注释/标签。不要发布答案。相反,要么接受答案(通过单击答案旁边的复选标记将其从空心切换为绿色),要么在对答案的评论中给出一些反馈。您可能可以使用与中所述类似的方法省略
.git
文件