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