2012-12-22 154 views
0

文件夾,我需要做的是替換文件夾amtlib.framework到每個的Adobe應用程序在我的Mac需要幫助寫bash腳本走動

,如果我這樣做: cd /Applications; ls | grep Adobe,這給了我一切,我需要

的文件夾

這裏的一些僞代碼:

apps = ls | grep Adobe 
for each x in apps 
    if (x/x.app/contents/frameworks/amtlib.framwork) //if this folder exists 
     add .bak extension //amtlib.framework.bak 
     copy ~/Downloads/.../amtlib.framwork to x/x.app/contents/frameworks/ 

如何將我實現這個作爲一個bash腳本?

回答

0

喜歡的東西

for x in $(ls | grep Adobe) ; do 
    if [[ -d "${x}"/"${x}".app/contents/frameworks/amtlib.framwork ]] ; then 
     # add .bak extension # //amtlib.framework.bak 
     #? mkdir "${x}"/"${x}".app/contents/frameworks/amtlib.framwork.bak 
     #? /bin/mv "${x}"/"${x}".app/contents/frameworks/amtlib.framwork {x}/${x}.app/contents/frameworks/amtlib.framwork.bak 
     /bin/cp ~/Downloads/.../amtlib.framwork to "${x}"/"${x}".app/contents/frameworks/ 
    else 
     : # ??? what do you want to do if there's not 
    fi 
done # loop 

如果你很可能有空格的dirnames中,(不知道OSX支持-print0),但儘量

find . -name 'Adobe' -print0 \ 
| while read x ; do 
    if .... 

作爲一個僅供參考,分配在bash (=周圍沒有空格):

apps=$(ls | grep Adobe) 

Depe根據這種情況,您需要使用"$apps",或者僅僅使用$apps,這會將列表中的每個詞作爲單獨的令牌。 (如果文件名或路徑中有空格,則1個路徑/文件現在是2個單詞,並且會導致問題)。還有陣列符號使用,apps=($(ls | grep Adobe)),並使用像${#apps[@]}(元素數),${apps[@]}(所有元素),${apps[1]},(第一元素)是可能的變種。

此外,目前尚不清楚您與add .bak extension的目的是什麼。我最好的猜測是我的第二個選擇,/bin/mv ... .bak。 IHD。

IHTH。

+0

只是一個評論:**不解析'ls' **的輸出。改用globs:'for * in * Adob​​e *;做' –

+0

好,點了。我承諾! ;-) 祝你們好運。 – shellter

0

首先,原始帖子中存在拼寫錯誤,這些錯誤在給出的示例中都有所體現。您正在尋找重命名/替換的文件夾是amtlib.framework,不是框架

其次,出於某種原因,測試爲.bak的目錄的存在是不是爲我工作,甚至當我拆了這一點,以一個單獨的if-then語句它不工作:

cd /Applications 
for x in *Adobe* ; do 
printf "$x \n" 
printf "%s" " " 
if [ -d "$x/$x.app/contents/frameworks/amtlib.framework.bak" ]; then 
    printf "removing old bak... " 
    fi 
if [ -d "$x/$x.app/contents/frameworks/amtlib.framework" ]; then 
    printf "moving... " 
    printf "copying... " 
    printf "%s\n" "done!" 
    else 
    printf "%s\n" "nothing to do here!" 
    fi 
done 
cd ~ 

最後,瞭解您將無法更新一些具有額外文件夾級別的應用程序(例如Acrobat Pro和Illustrator)的目標。