J'essaie de trouver un moyen POSIX standard de dupliquer les autorisations d'un fichier sur un autre fichier. Sur un système GNU, c'est simple:
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
---------- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
[alexmchale@bullfrog ~]$ chmod --reference=hardcopy.1 hardcopy.4
[alexmchale@bullfrog ~]$ ls -l hardcopy.*
-rw-r--r-- 1 alexmchale users 2972 Jul 8 20:40 hardcopy.1
-rw-r--r-- 1 alexmchale users 2824 May 14 13:45 hardcopy.4
Malheureusement, le drapeau --reference de chmod est une option non standard. C'est donc à mes fins. Je préférerais que ce soit un monoplace, mais ce n'est pas nécessaire. En fin de compte, il doit être dans la syntaxe POSIX sh.
command-line
unix
chmod
posix
Alex
la source
la source
cp has template
doit être utiliséecp -p
pour conserver le mode et les attributs de propriété.cp
si le propriétaire / groupe du fichier (par exemple "utilisateur") est différent de celui qui effectue la copie (par exemple root).cp -p
là-bas.Vous pouvez utiliser la
stat
commande pour obtenir l'autorisation de fichier:Syntaxe Mac OS X (BSD):
Syntaxe Linux (pas sûr):
Le ` symbole est une citation arrière.
la source
stat
POSIX soit requis. Ce n'est souvent pas disponible.Les utilitaires ACL getfacl et setfacl peuvent être utilisés à cette fin, mais je ne sais pas si ce POSIX est suffisamment compatible. Fonctionne au moins sous FreeBSD 8.0 et Linux, mais d'un autre côté, il peut être nécessaire d'installer les utilitaires ACL.
Depuis la page de manuel:
Je pense que getfacl et setfacl peuvent également utiliser des autorisations de fichiers standard en plus des ACL.
la source
cp -p
préservera les autorisations de fichier.la source
-p
) fonctionne pour ce que l'OP veut, c'est-à-dire dupliquer les autorisations pour un fichier différent , pas un doublon du fichier.Une façon simple et portable n'est pas un utilitaire standard - vous devez appeler stat () sur le fichier modèle, puis chmod () sur le ou les fichiers de destination. Cela signifie utiliser un langage comme C ou un autre langage largement utilisé comme perl.
Les autorisations d'accès aux fichiers sont spécifiées dans le membre struct stat st_mode par les bits 0007777. La solution de Dennis est correcte, si elle est un peu lourde sur les E / S, donc pour les très gros fichiers, elle peut échouer:
Considérez cet exemple non prêt pour la production:
la source