0

我需要做的是将文件夹替换amtlib.framework到我 Mac 上的每个 Adob​​e 应用程序中

如果我这样做: 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 脚本?

4

2 回答 2

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

如果您的目录名中可能有空格(不确定 OSX 是否支持-print0),但请尝试

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

作为一个仅供参考,bash 中的分配是这样完成的(在 周围没有空格=):

apps=$(ls | grep Adobe)

根据当时的情况,您需要使用"$apps",或者只是 plain $apps,它将列表中的每个单词作为单独的标记。(如果您的文件名或路径中有空格,则 1 路径/文件现在是 2 个单词,并且会导致问题)。还可以使用数组表示法, apps=( $(ls | grep Adobe) ), 并且可以使用${#apps[@]}(number of elems), ${apps[@]}(all elems), ${apps[1]},(first elem) 之类的变量。

此外,目前尚不清楚您的意图add .bak extension是什么。我最好的猜测是我的第二个选项,/bin/mv ... .bak.

IHTH。

于 2012-12-22T04:20:28.013 回答
0

首先,在给出的示例中,原始帖子中存在拼写错误。您要重命名/替换的文件夹是 amtlib.framework,而不是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)。

于 2013-01-06T07:38:02.950 回答