在OS X上替换chmod --reference?

Ste*_*ont 6 linux macos bash jenkins

我正在尝试将一些jenkins bash脚本从Ubuntu移植到OSX。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
Run Code Online (Sandbox Code Playgroud)

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

bas*_*ist 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
Run Code Online (Sandbox Code Playgroud)

如果没有-c选项,请检查stat 的手册页中的formatting。您可以找到类似的方法来获取文件的权限/模式。

  • 我认为你必须`stat -r $FILE | 在 OSX 上剪切 -f3 -d' '` 以获取八进制权限位图。`-r` 输出 `struct stat` 的“原始”内容,第三列是文件模式。 (4认同)