2014-07-09 33 views
0

我需要檢查root是否是特定目錄中每個文件的所有者。我能做如何獲得Linux中目錄中每個文件的所有者?

stat --format=%u /directory/name/here 

獲取目錄本身的所有者,但不是它的文件。

我的另一個想法是做

ls -lL | grep "^-\|^d" | cut -d ' ' -f 2 

,但如果在權限中的最後一個字節是一個空間,而不是一個不工作「」。

這也是CentOS的重要。

+0

你想要的確切輸出是什麼? – konsolebox

回答

1

你問兩個不同的問題。

我需要檢查,如果根是每個文件的特定目錄

主人發現某些文件 root擁有的,你可以這樣做:

find /yourdir ! -user root 

如果它根本返回任何文件名,那麼root不是特定目錄中每個文件的所有者。

如何獲得Linux中目錄中每個文件的所有者?

要打印的每個文件在目錄中的用戶名:

find /yourdir -printf '%u %p\n' 

如果最後一步將是chown不是root擁有的文件,你可以簡單地做chown -R root /yourdir,因爲有一個在不傷害把根文件chowning到root。

+0

這太簡單有效了,謝謝! – michaelAdam

+0

是否可以檢查是否有任何文件不屬於任何幾個用戶名?就像find/yourdir一樣! -user(root,user1,user2,user3)| wc -l? – michaelAdam

+1

你可以使用'-a'作爲「和」。 '找到你的! -user root -a! -user foo -a! '用戶欄'('-a'實際上是可選的,但包含用於說明) –

0

嘗試

find /your/dir/ -type f -exec stat --format='%u %n' '{}' \; 

我加%n顯示文件名。

閱讀find(1)更多信息有關find ....你可能想-max_depth 1避免/your/dir/

+0

那麼使用-execdir來代替呢?手冊頁說它更安全。我其實不知道如何。 – michaelAdam

+0

如果你打算使用find,你應該使用'-printf%u \\ n'並且完全避免使用'-exec'。 –

0
for F in /directory/*; do stat --format='%u' "$F"; done 

深深地去還可以選擇添加dotglob選項,以配合開頭的文件。還有:

shopt -s dotglob 
for F in /directory/*; do stat --format='%u' "$F"; done 

    *--format相當於-c

+0

我修正了' - '。 – michaelAdam

+0

@michaelAdam更新了它的答案。 – konsolebox

2

您可以使用find

find /tmp -type f -printf '%u\n' | sort -u 
lightdm 
root 
tiago 

如果您需要UID以數字形式,喜歡用stat

find /tmp -type f -printf '%U\n' | sort -u 
0 
1000 
104 
相關問題