Замена для chmod - ссылка на OS X? - PullRequest
4 голосов
/ 22 апреля 2011

Я пытаюсь перенести некоторые скрипты jenkins bash из Ubuntu в OS X. В Linux (и я думаю, что это изначально GNU) есть опция --reference, которая позволяет копировать режим из эталонного файла. Я ищу эквивалентный код для OS X, желательно без установки дополнительных пакетов. Еще лучше было бы кроссплатформенное решение.

Бетонный фрагмент:

# 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

[править] Комбинация stat -r с сохранением режима файла является правильной комбинацией, stat -c не существует в OS X

Ответы [ 3 ]

3 голосов
/ 22 апреля 2011

Как насчет использования переключателя формата во FreeBSD stat:

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

stat -f "%u:%g:%p" ~/.bashrc
2 голосов
/ 22 апреля 2011

Если ваша OS X имеет команду 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

Если у нее нет опции -c, проверьте справочную страницу stat при форматировании.Вы можете найти похожие способы получить разрешение / режим файла.

2 голосов
/ 22 апреля 2011

Скопируйте файл сначала и только потом перезаписывайте с перенаправлением оболочки.Это должно сохранить исходные разрешения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...