OS X 上 chmod --reference 的替代品?

发布于 2024-11-02 20:19:53 字数 616 浏览 0 评论 0原文

我正在尝试将一些 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

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

I'm trying to port some jenkins bash scripts from Ubuntu to OS X. The linux (and I think it is originally GNU) chmod has a --reference option that allows copying the mode from a reference file. I am looking for the equivalent code for OS X, preferably without installing extra packages. Even better would be a cross-platform solution.

The concrete snippet:

# 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] The combination of stat -r with saving the file mode is the right combination, stat -c doesn't exist on OS X

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

淡水深流 2024-11-09 20:19:53

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

Copy the file first and only then overwrite with a shell redirection. This should preserve the original permissions.

酒绊 2024-11-09 20:19:53

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

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

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

How about using the format switch to FreeBSD stat:

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

stat -f "%u:%g:%p" ~/.bashrc
永言不败 2024-11-09 20:19:53

如果您的 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 的手册页 处于格式化状态。您可以找到类似的方法来获取文件的权限/模式。

If your OS X has the stat command

# 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

If it doesn't have -c option, check the man page of stat under formatting. you can find similar ways to get the permission/mode of the file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文