Je cherche une commande qui renverra le propriétaire d'un répertoire et seulement cela - comme une expression régulière analysant la ls -lat
commande ou quelque chose de similaire? Je veux utiliser le résultat dans un autre script.
shell-script
ls
Jason
la source
la source
stat
(un standard du site) dans/usr/local/bin
ou quelque part dans la maison de l’utilisateur), et est rarement disponible sur d'autres unices.stat -c %U
a l'avantage de travailler également avec BusyBox , si lastat
commande est compilée.stat -c '%U' DIR
imprimeraUNKNOWN
, ce qui est moins utile ou plus approprié, selon votre apparence.L’analyse de la sortie de
ls
est rarement une bonne idée , mais l’obtention des premiers champs est une exception, elle fonctionne en fait sur tous les unices «traditionnels» (elle ne fonctionne pas sur des plates-formes telles que certaines implémentations Windows qui autorisent des espaces dans les noms d’utilisateur).Une autre option consiste à utiliser une
stat
commande, mais le problème posé parstat
le shell réside dans le fait qu'il existe plusieurs commandes avec une syntaxe différente, de sortestat
qu'un script de shell est non exportable (même sur les installations Linux).Notez que tester si un utilisateur donné est le propriétaire est une proposition différente.
la source
ls | awk
Malheureusement, comme je l’ai déjà noté ici, il y a certaines mises en garde concernant cette approche . Je n'ai pas encore trouvé de solution pour le problème "le fichier / répertoire cible est un lien symbolique portant un nom différent", problème que j'ai mentionné dans mon récent commentaire.find . -user "$username" -print -prune -o -prune
vous pourriez simplement le fairefind . -maxdepth 0 -user "$username"
awk 'NR==1 {print $3}'
au lieu de justeawk '{print $3}'
? Je ne sais pas pourquoiNR==1
c'est nécessaire ici.ls
laquelle une nouvelle ligne dans un chemin provoque la scission de la ligne en deux (ce qui, je crois, est le cas extrême que vous essayez de couvrir)? Sous GNUls
(version nouvelle), BusyBoxls
et FreeBSD,ls
une nouvelle ligne est renvoyée sous la forme$'\n'
,?
et?
.On peut aussi le faire avec GNU find:
Ce n’est pas portable en dehors du système GNU, mais je serais surpris de trouver une distribution Linux où cela ne fonctionne pas.
la source
find
n’a pas-printf
.-printf
:-(.En bash pur, vous pouvez convertir la sortie de
ls
en un tableau et l’indexer.Il est pas aussi élégant que l' utilisation
stat
,find
ouawk
, mais pourrait travailler dans un pincement.la source