AppStoreExtract.sh shell script

Heckmek

APPRENTICE
27 Haz 2017
56
5
21
47
Apple app store'dan indirilen programların kurulum dosyalarını kaydetmek için kullanışlı bir araç.
Downloading installer packages from the Mac App Store with AppStoreExtract | Der Flounder
Bu bağlantıda nasıl kullanılacağı anlatılıyor ama ben kodu indirmekte ve çalıştırmakta biraz zorlandım o yüzden belki sizde zorlanırsınız diye birkaç şey eklemek istiyorum.

Aşağıdaki kodu AppStoreExtract.sh ismi ile (ve belki de istediğiniz başka bir isimle) istediğiniz yere kaydedin. Sonra executable yapmak için:
Terminal'den kaydettiğiniz klasöre gidip "chmod +x AppStoreExtract.sh" komutunu yazıp enterleyin
Çalıştırmak için de "sh AppStoreExtract.sh" yazıp enterleyin.

Kod:
#!/bin/bash
###
# Script to extract Installer packages from the Apple AppStore for OS X
###
# last edited: 2017-02-16
###
# This script was tested under
# OS X Mountain Lion v10.8.5
# OS X Mavericks 10.9.x
# OS X El Capitan 10.11.x
# macOS Sierra 10.12.x
#
# Based on an idea from Rich Trouton for downloading from the AppStore:
# http://derflounder.wordpress.com/2013/10/19/downloading-microsofts-remote-desktop-installer-package-from-the-app-store/
###
# Edited and extended for internal use at ETH Zurich
# by Katiuscia Zehnder, Jan Hacker and Max Schlapfer
###


###
# Short documentation
# - This script needs the temporary download folder from the AppStore App, this is individual by host
#   and is extracted by using "getconf DARWIN_USER_CACHE_DIR".
#   In macOS versions before Sierra (10.11.x and older), you can access the debug menu in the AppStore App:
#    - Quit the AppStore.app if it is running
#       - Open the terminal and enter "defaults write com.apple.appstore ShowDebugMenu -bool true"
#       - Start AppStore.app and browse the menu Debug
#    --> The debug menu is no longer accessible with macOS Sierra v10.12.0 or higher.
# - The folder /Users/Shared/AppStore_Packages is generated and used as the packages output folder
# - Open Terminal and start this script (if needed make it executable first), keep the window open.
#   If the output will be used with munikimport add the option "-m" to make the naming munki-friendly
# - Back in the AppStore.app login in to your account and navigate to your purchases
#   - Click "Install" for all desired packages
#   - Wait till every download/installation has finished
# - Go back to the terminal and continue the script by pressing any key to stop processing downloads
# - Answer the following question with yes (y) to finalize and clean up the downloaded packages
###

###
# Definition of the local temporary AppStore folder
###
AppStoreRoot="$(getconf DARWIN_USER_CACHE_DIR)/com.apple.appstore"

###
# Definition of the local output folder where the extracted packages are stored on your machine
###
mkdir -p /Users/Shared/AppStore_Packages

Destination="/Users/Shared/AppStore_Packages/"

# Let users switch to munki naming convention by using -m as first argument to this script
separator="_"
if [ "$1" = "-m" ]; then
 separator="-"
fi


# Make sure we can find PlistBuddy
if [ -e "/usr/libexec/PlistBuddy" ] ; then
    PBUDDY="/usr/libexec/PlistBuddy"
else
    echo "Can't find PlistBuddy. Aborting configuration script."
    exit
fi

echo "Press any key to finish after downloading new software from AppStore."
myinput=''

if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
while [ "x${myinput}" = "x" ]
do
    find "$AppStoreRoot" -name \*.pkg  | xargs -I {} sh -c 'ln "$1" "$2$(basename $1)" 2> /dev/null ; cp -n "$3/manifest.plist" "$2$(basename $1).plist" ' - {} "$Destination" "$AppStoreRoot"
    myinput="`cat -v`"
    sleep 0.05
done
if [ -t 0 ]; then stty sane; fi

echo -e '\n\nDo you want to finalize the packages? (N/y)\n'
read -n 1 -s  myinput
if [ "$myinput" == "y" ]
then
    for swpkg in ${Destination}*.plist
    do
    #    plutil -convert xml1 $swpkg
        mypackage=`echo  $(basename $swpkg) | perl -pe 's/\.plist$//'`
      
        i=0
        while [ 1 ]; do
            pkgname=$($PBUDDY -c "Print :representations:${i}:assets:0:name" "$swpkg" 2>/dev/null)
            if [ $? -ne 0 ]; then
                    # finish execution
                    break
                    #exit 0
            fi
            if [ "$pkgname" == "$mypackage" ]; then
                version=$($PBUDDY -c "Print :representations:${i}:bundle-version" "$swpkg" 2>/dev/null)
                appname=$($PBUDDY -c "Print :representations:${i}:title" "$swpkg" 2>/dev/null)
                appname=`echo $appname | perl -pe 's/\ //g'`
                echo "Softwarepackage will be renamed from ${Destination}${mypackage} to ${Destination}${appname}${separator}${version}.pkg"
                mv "${Destination}${mypackage}" "${Destination}${appname}${separator}${version}.pkg" 2>/dev/null
                rm "${Destination}${mypackage}.plist"
            fi
            i=$(($i+1))
        done
    done

    echo -e '\nThe packages will be converted into dmg files. This could take a while.'
    for swpkg in ${Destination}*.pkg
    do
        finaldmg=`echo ${swpkg} | perl -pe 's/\.pkg$//'`
        echo -e "\ncreating ${finaldmg}.dmg"
        hdiutil create -srcfolder "${swpkg}" -format UDRO "${finaldmg}"
        rm "${swpkg}"
    done

fi
 
  • Like
Tepkiler: montezuma
AD Engelleyici Tespit Edildi

Anlıyoruz, reklamlar can sıkıcı!

Elbette, reklam engelleme yazılımı reklamları engelleme konusunda harika bir iş çıkarsa da, web sitemizin faydalı özelliklerini de engeller. En iyi site deneyimi ve bize destek olmak için lütfen AdBlocker’ınızı devre dışı bırakın.

AD Reklam Engelleyiciyi Devre Dışı Bıraktım    Hayır teşekkürler