僅列出我擁有的文件的最佳方法

僅列出我擁有的文件的最佳方法

我可以用它來列出目錄中的所有文件,只顯示我擁有的文件,那麼最好的 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)

相關內容