在OS X上替换chmod --reference?

时间:2011-04-22 08:33:59

标签: linux macos bash jenkins

我正在尝试将一些jenkins bash脚本从Ubuntu移植到OS X.linux(我认为它最初是GNU)chmod有一个--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

[edit] stat -r与保存文件模式的组合是正确的组合,OS X上不存在stat -c

3 个答案:

答案 0 :(得分:3)

如何使用格式切换到FreeBSD stat:

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

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

答案 1 :(得分:2)

首先复制文件,然后用shell重定向覆盖。这应该保留原始权限。

答案 2 :(得分:2)

如果您的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选项,请检查格式下的man page of stat。您可以找到获得文件权限/模式的类似方法。