我可以用它来列出目录中的所有文件,只显示我拥有的文件,那么最好的 shell 命令“oneliner”是什么?
答案1
简短的一句话是:
find . -maxdepth 1 -user $USER
如果您正在当前目录中查找,则可以省略.
.如果您不知道是否$USER
可用,可以将其替换为$LOGNAME
或$(whoami)
。
添加-ls
显示文件详细信息,例如:
find / -maxdepth 1 -user root -ls
如果您想提供自定义标志,ls
可以通过以下方式使用它-exec
:
find / -maxdepth 1 -user root -exec ls -ld {} +
(在这种情况下,需要使用-d
标志来ls
将目录列为目录本身而不是其内容。)
答案2
使用下面的命令
[username@localhost~]$ find / -user username -exec ls -l {} \; 2>/dev/null
查找整个系统中用户名拥有的所有文件。如果您从特定目录中找到,只需替换位置 / 。
[username@localhost~]$ find /path/of/direcotry -user username -exec ls -l {} \; 2>/dev/null
注意:2>/dev/null 使错误输出无效。
答案3
由于您没有指定输出的格式,您也可以使用 ls 和 grep 来执行此操作:
ls -lG | grep username
首先,我们使用 ls 和 -l 参数来获取包含用户名和组名的列表。
然后我们使用 -G 参数从结果中删除组名。
之后,我们只需将其传输到 grep 并使用所需的用户名获取所有结果。
编辑: 正如评论中指出的,这是不是保险箱或防弹解决方案 - 然而,根据您的情况,这可能是一个快速而肮脏的解决方案。交互地,它可能是可以接受的,但您不应该在任何脚本中使用它!
答案4
有了zsh
,您可以使用全局限定符u
:
u
ID用户 ID 拥有的文件ID如果那是一个数字。否则,ID指定用户名:“ ”后面的字符
u
将被视为分隔符,它与下一个匹配分隔符之间的字符串将被视为用户名。起始分隔符 '[
'、'{
' 和 '<
' 分别与最终分隔符 ']
'、'}
' 和 '>
' 匹配;任何其他字符都与其自身匹配。所选文件是该用户拥有的文件。例如,“u:foo:
”或“u[foo]
”选择用户“foo
”拥有的文件。
所以例如与用户ID
print -rl ./*(u1027)
或使用用户名
print -rl ./*(u_yourusernamegoeshere_)
像往常一样,您可以将其与其他限定符、修饰符等结合使用,例如仅列出常规文件,无论是否隐藏,由用户拥有并按UID
1027
其排序mtime
:
print -rl ./*(.Domu1027)