仅列出我拥有的文件的最佳方法

仅列出我拥有的文件的最佳方法

我可以用它来列出目录中的所有文件,只显示我拥有的文件,那么最好的 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

uID

用户 ID 拥有的文件ID如果那是一个数字。否则,ID指定用户名:“ ”后面的字符u将被视为分隔符,它与下一个匹配分隔符之间的字符串将被视为用户名。起始分隔符 ' ['、' {' 和 ' <' 分别与最终分隔符 ' ]'、' }' 和 ' >' 匹配;任何其他字符都与其自身匹配。所选文件是该用户拥有的文件。例如,“ u:foo:”或“ u[foo]”选择用户“ foo”拥有的文件。

所以例如与用户ID

print -rl ./*(u1027)

或使用用户名

print -rl ./*(u_yourusernamegoeshere_)

像往常一样,您可以将其与其他限定符、修饰符等结合使用,例如仅列出常规文件,无论是否隐藏,由用户拥有并按UID 1027其排序mtime

print -rl ./*(.Domu1027)

相关内容