2010-10-07 8 views
10

पर फ़ोल्डर में फ़ाइल मालिकों की सूची में मेरे पास कई फाइलों वाला फ़ोल्डर है। फाइलें कई अलग-अलग उपयोगकर्ताओं द्वारा बनाई गई हैं। मुझे खोल स्क्रिप्टिंग के बारे में पता नहीं है।लिनक्स

मुझे फ़ाइलों के मालिकों के उपयोगकर्ता नाम (केवल) की सूची प्राप्त करने की आवश्यकता है।

मैं -l ls के उत्पादन में सहेज सकते हैं और उसके बाद पर्ल अजगर आदि का उपयोग कर इसे पार्स ...

लेकिन कैसे मैं इस का उपयोग करते हुए शेल पटकथा लेखन कर सकते हैं?

उत्तर

10

एक साधारण एक

ls -l /some/dir/some/where | awk '{print $3}' | sort | uniq 

जो आपको एक अनूठा हो जाता है और स्वामियों की सूची सॉर्ट किया है।

+2

पार्सिंग 'एलएस 'नहीं किया जाना चाहिए। http://mywiki.wooledge.org/ParsingLs –

+0

@DanielKamilKozar यह एक अच्छा पठन था, लेकिन अगर आपके पास अजीब नाम वाली फाइलें हैं तो चिंता करने योग्य केवल तभी। – gmeben

+1

@gmeben: जब रिक्त स्थान अजीब माना जाता है? –

2

अब तक दो समाधान अच्छे हैं, लेकिन उनकी सीमाएं हैं।

यह आपको निर्देशिका पेड़ में प्रत्येक फ़ाइल को ठीक से और पुनरावर्ती रूप से खोजना चाहिए।

sudo find /some/dir/ -exec stat -c "%U" {} + | sort | uniq 

दूसरे शब्दों में, रिकर्सिवली /some/dir में फ़ाइलें खोजने के, और फ़ाइलों पर stat -c "%U" (प्रिंट उपयोगकर्ता नाम) पर अमल, संभव (-exec <cmd> {} + वाक्य रचना) के रूप में stat के रूप में कुछ आमंत्रण में, तो निश्चित रूप से sort उपयोगकर्ता नाम की सूची , तो आप बदले में उन्हें uniq उपयोगकर्ता नामों के सेट पर खींच सकते हैं।

+0

फ्रीब्स पर: 'ढूंढें/कुछ/डीआईआर/-टाइप f -exec stat -f "% Su" {} + | सॉर्ट | uniq'। ओपी केवल * फाइल * की तलाश में है, इसलिए मैंने 'टाइप प्रकार' जोड़ा। – simlev