2011-04-22 4 views
2

J'essaie de porter des scripts bash jenkins d'Ubuntu à OS X. Le chmod linux (et je pense qu'il est à l'origine GNU) a une option --reference qui permet de copier le mode à partir d'un fichier de référence. Je cherche le code équivalent pour OS X, de préférence sans installer de paquets supplémentaires. Mieux encore serait une solution multiplateforme.Remplacement pour chmod --reference sur OS X?

L'extrait en béton:

# expand all the templates 
find "$OUTPUT_PATH" -name "*.template" | while read FILE ; do 
    sed \ 
     -e "s/%{NAME}/$OPTION_NAME/g" \ 
     -e "s/%{TITLE}/$OPTION_TITLE/g" \ 
     -e "s/%{VERSION}/$OPTION_VERSION/g" \ 
     -e "s/%{WHEN}/$OPTION_WHEN/g" \ 
      "$FILE" > "${FILE%.*}" 
    chmod --reference="$FILE" "${FILE%.*}" 
    rm -f "$FILE" 
done 

[modifier] La combinaison de -r stat avec l'enregistrement du mode de fichier est la bonne combinaison, -c stat n'existe pas sur OS X

+2

script shell multi-plateforme, c'est un bon :) –

Répondre

2

Si votre OS X a la commande stat

# expand all the templates 
find "$OUTPUT_PATH" -name "*.template" | while read FILE ; do 
    savemod=$(stat -c "%a" "$FILE") 
    sed \ 
     -e "s/%{NAME}/$OPTION_NAME/g" \ 
     -e "s/%{TITLE}/$OPTION_TITLE/g" \ 
     -e "s/%{VERSION}/$OPTION_VERSION/g" \ 
     -e "s/%{WHEN}/$OPTION_WHEN/g" \ 
      "$FILE" > "${FILE%.*}" 
    chmod $savemod "${FILE%.*}" 

    rm -f "$FILE" 
done 

Si elle n'a pas l'option -c, vérifiez la man page of stat sous forme. vous pouvez trouver des moyens similaires pour obtenir l'autorisation/le mode du fichier.

+0

'stat (1)' n'a pas une option '-c'. –

+3

Je pense que vous deviez 'stat -r $ FILE | couper -f3 -d '' 'sur OSX pour obtenir le bitmap des permissions octales. Le '-r' sort le contenu" brut "de la' struct stat' et la troisième colonne est le mode fichier. –

+0

@mu me battre! Je lisais la page de manuel. :-P –

2

Copiez le fichier d'abord et seulement ensuite écraser avec une redirection de shell. Cela devrait préserver les autorisations d'origine.

3

Que diriez-vous à l'aide du commutateur de format pour FreeBSD stat:

stat -f "%p" ~/.bashrc 
stat -f "%Sp" ~/.bashrc 

stat -f "%u:%g:%p" ~/.bashrc 
+0

C'est une bonne suggestion. Combiné avec l'enregistrement du mode fichier –