在OS X中替代chmod --reference命令的方法是什么?

9

我正在尝试将一些Ubuntu上的Jenkins的bash脚本移植到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 的组合是正确的组合,在 OS X 上不存在 stat -c。


2
跨平台的Shell脚本,那是个好东西 :) - mu is too short
3个回答

3

先复制文件,然后再使用 shell 重定向覆盖。这样可以保留原始权限。


3
如何使用格式开关来统计FreeBSD的状态:
stat -f "%p" ~/.bashrc
stat -f "%Sp" ~/.bashrc

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

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选项,请查看stat的man页中的格式说明。您可以找到类似的方法来获取文件的权限/模式。

stat(1) 没有 -c 选项。 - user557219
4
我认为在OSX上,你需要运行 stat -r $FILE | cut -f3 -d' ' 命令来获取八进制权限位图。-r 参数会输出 struct stat 结构的原始内容,第三列即为文件模式。 - mu is too short
看了一下 man 手册,有类似 -c 的方式,但我没有 OS X 无法测试。 - bash-o-logist
@Bavarious:我猜我比你读得快 :) @bash-o-logist:stat -r和一点cut来切出有趣的部分就可以了。 - mu is too short
@mu太短了。发现你的其他答案可以投票支持 :) - Stephan Eggermont

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接