0

私がする必要があるのは、フォルダamtlib.frameworkを私のMac上の各Adobeアプリに置き換えることです

私がそうするなら: 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

まず第一に、元の投稿にはタイプミスがあります。名前の変更/置き換えを検討しているフォルダーは、 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 に答える
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[@]}${apps[@]}${apps[1]},

また、あなたの意図が何のためにあるのかは明らかではありませんadd .bak extension。私の最善の推測は、私の 2 番目のオプションです/bin/mv ... .bak

IHTH。

于 2012-12-22T04:20:28.013 に答える