2011-04-22 92 views
2

我試圖將一些jenkins bash腳本從Ubuntu移植到OS X. linux(我認爲它本來就是GNU)chmod有一個--reference選項,允許從參考文件複製模式。我正在尋找OS X的等效代碼,最好不要安裝額外的軟件包。更好的是一個跨平臺的解決方案。替換爲OS X上的chmod --reference?

具體的片斷:

# 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 

[編輯]統計-r的保存文檔的模式是正確的組合,統計-c不會在OS X

+2

跨平臺的shell腳本,這是一個很好的:) – 2011-04-22 08:55:30

回答

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。你可以找到類似的方式來獲得文件的權限/模式。

+0

'STAT(1)'沒有'-c'選項。 – 2011-04-22 08:51:38

+3

我認爲你必須'stat -r $ FILE |在OSX上剪下-f3 -d'''來獲得八進制權限位圖。 '-r'輸出'struct stat'的「raw」內容,第三列是文件模式。 – 2011-04-22 08:53:44

+0

@mu擊敗我!我正在閱讀手冊頁。 :-P – 2011-04-22 08:54:59

2

複製存在的組合首先文件,然後才用shell重定向覆蓋。這應該保留原始權限。

3

如何使用格式切換到FreeBSD統計:

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

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

這是一個很好的建議。結合保存文件模式 – 2011-04-23 20:11:56