2010-10-07 11 views
10

J'ai un dossier avec beaucoup de fichiers. Les fichiers ont été créés par de nombreux utilisateurs différents. Je ne connais pas les scripts shell.liste des propriétaires de fichiers dans le dossier sur Linux

Je dois obtenir la liste du nom d'utilisateur (seulement) des propriétaires des fichiers.

j'enregistrer la sortie de ls -l puis analyser en utilisant perl python etc ...

Mais comment puis-je faire cela en utilisant les scripts shell?

Répondre

10

simple est

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

qui vous obtient un unique et triée la liste des propriétaires.

+2

L'analyse 'ls' ne doit pas être effectuée. http://mywiki.wooledge.org/ParsingLs –

+0

@DanielKamilKozar C'était une bonne lecture, mais cela ne vaut la peine de s'inquiéter si vous avez des fichiers bizarrement nommés. – gmeben

+1

@gmeben: depuis quand les espaces sont-ils considérés comme impairs? –

2

Les deux solutions jusqu'à présent sont bonnes, mais ont leurs limites. Cela devrait vous garantir une recherche correcte et récursive de tous les fichiers dans une arborescence de répertoires.

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

En d'autres termes, la recherche récursive des fichiers dans /some/dir et exécuter stat -c "%U" (nom d'utilisateur d'impression) sur les fichiers, en peu de invocations de stat que possible (-exec <cmd> {} + syntaxe), puis bien sûr sort la liste des noms d'utilisateur , de sorte que vous pouvez à leur tour les réduire à l'ensemble des noms d'utilisateur uniq ue.

+0

Sur FreeBSD: 'find/un/dir/-type f -exec stat -f"% Su "{} + | trier | uniq'. OP ne recherche que * fichiers *, donc j'ai ajouté '-type f'. – simlev

Questions connexes