就像是
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。