├── .gitignore ├── README.md ├── brew-cask-upgrade.sh └── handbrake-batchconvert.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | # IntelliJ project files 3 | .idea 4 | *.iml 5 | out 6 | gen 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Scripts and Utilities 2 | ======== 3 | 4 | Random scripts for your pleasure... 5 | 6 | Scripts 7 | -------- 8 | 9 | # brew-cask-upgrade.sh 10 | Force cleanup and upgrade of all brew casks, pass parameters to exclude packages. (Separate excludes with a pipe | ) 11 | ```bash 12 | ./brew-cask-upgrade.sh "" "" 13 | ``` 14 | 15 | # handbrake-batchconvert.sh 16 | Script to recursively search a directory and batch convert all files of a given file type into another file type via HandBrake conversion. Set the properties at the top of the script. 17 | ```bash 18 | ./handbrake-batchconvert.sh 19 | ``` 20 | -------------------------------------------------------------------------------- /brew-cask-upgrade.sh: -------------------------------------------------------------------------------- 1 | #!/bin/zsh 2 | 3 | ### 4 | ### sourcing config file 5 | ### 6 | 7 | if [[ -f ~/.shellscriptsrc ]]; then . ~/.shellscriptsrc; else echo '' && echo -e '\033[1;31mshell script config file not found...\033[0m\nplease install by running this command in the terminal...\n\n\033[1;34msh -c "$(curl -fsSL https://raw.githubusercontent.com/tiiiecherle/osx_install_config/master/_config_file/install_config_file.sh)"\033[0m\n' && exit 1; fi 8 | eval "$(typeset -f env_get_shell_specific_variables)" && env_get_shell_specific_variables 9 | 10 | 11 | 12 | ### 13 | ### asking password upfront 14 | ### 15 | 16 | if [[ -e /tmp/tmp_backup_script_fifo2 ]] 17 | then 18 | delete_tmp_backup_script_fifo2() { 19 | if [[ -e "/tmp/tmp_backup_script_fifo2" ]] 20 | then 21 | rm "/tmp/tmp_backup_script_fifo2" 22 | else 23 | : 24 | fi 25 | } 26 | unset SUDOPASSWORD 27 | SUDOPASSWORD=$(cat "/tmp/tmp_backup_script_fifo2" | head -n 1) 28 | USE_PASSWORD='builtin printf '"$SUDOPASSWORD\n"'' 29 | delete_tmp_backup_script_fifo2 30 | set +a 31 | env_sudo 32 | else 33 | env_enter_sudo_password 34 | fi 35 | 36 | 37 | 38 | ### 39 | ### functions 40 | ### 41 | 42 | number_of_parallel_processes() { 43 | NUMBER_OF_CORES=$(parallel --number-of-cores) 44 | NUMBER_OF_MAX_JOBS=$(echo "$NUMBER_OF_CORES * 2.5" | bc -l) 45 | #echo $NUMBER_OF_MAX_JOBS 46 | NUMBER_OF_MAX_JOBS_ROUNDED=$(awk 'BEGIN { printf("%.0f\n", '"$NUMBER_OF_MAX_JOBS"'); }') 47 | #echo $NUMBER_OF_MAX_JOBS_ROUNDED 48 | NUMBER_OF_MAX_JOBS_ROUNDED_DOUBLED=$(echo "$NUMBER_OF_MAX_JOBS_ROUNDED * 2.0" | bc -l) 49 | #echo $NUMBER_OF_MAX_JOBS_ROUNDED_DOUBLED 50 | NUMBER_OF_MAX_JOBS_ROUNDED_DOUBLED_ROUNDED=$(awk 'BEGIN { printf("%.0f\n", '"$NUMBER_OF_MAX_JOBS_ROUNDED_DOUBLED"'); }') 51 | #echo $NUMBER_OF_MAX_JOBS_ROUNDED_DOUBLED_ROUNDED 52 | } 53 | 54 | cleanup_formulae() { 55 | if [[ ! -s "$TMP_DIR_FORMULAE_VERSIONS"/"$DATE_LIST_FILE_FORMULAE_VERSIONS" ]] 56 | then 57 | # file is empty or does not exist 58 | : 59 | else 60 | # file exists and is not empty 61 | sort "$TMP_DIR_FORMULAE_VERSIONS"/"$DATE_LIST_FILE_FORMULAE_VERSIONS" -o "$TMP_DIR_FORMULAE_VERSIONS"/"$DATE_LIST_FILE_FORMULAE_VERSIONS" 62 | 63 | while IFS= read -r line || [[ -n "$line" ]] 64 | do 65 | if [[ "$line" == "" ]]; then continue; fi 66 | FORMULA=$(echo "$line" | awk '{print $2}') 67 | #echo '' 68 | #echo "$(echo "$line" | awk '{print $1}') versions of $FORMULA are installed..." 69 | #echo "uninstalling all outdated versions..." 70 | if [[ -e "$BREW_FORMULAE_PATH"/"$FORMULA" ]] 71 | then 72 | # uninstall old versions 73 | local FORMULA_INFO=$(brew info --json=v1 "$FORMULA" | jq '.[]') 74 | local FORMULA_NAME=$(printf '%s\n' "$FORMULA_INFO" | jq -r '.name') 75 | local FORMULA_REVISION=$(printf '%s\n' "$FORMULA_INFO" | jq -r '.revision') 76 | if [[ "$FORMULA_REVISION" == "0" ]] 77 | then 78 | #local NEW_VERSION=$(printf '%s\n' "$FORMULA_INFO" | grep -e "$FORMULA: .*" | cut -d" " -f3 | sed 's/,//g') 79 | local NEW_VERSION=$(printf '%s\n' "$FORMULA_INFO" | jq -r '.versions.stable') 80 | else 81 | #local NEW_VERSION=$(echo $(printf '%s\n' "$FORMULA_INFO" | grep -e "$FORMULA: .*" | cut -d" " -f3 | sed 's/,//g')_"$FORMULA_REVISION") 82 | local NEW_VERSION=$(echo $(printf '%s\n' "$FORMULA_INFO" | jq -r '.versions.stable')_"$FORMULA_REVISION") 83 | fi 84 | local INSTALLED_VERSIONS=$(ls -1 "$BREW_FORMULAE_PATH"/"$FORMULA" | sort -V) 85 | local NEWEST_INSTALLED_VERSION=$(printf '%s\n' "$INSTALLED_VERSIONS" | tail -n 1) 86 | #local VERSIONS_TO_UNINSTALL=$(printf '%s\n' "$INSTALLED_VERSIONS" | grep -v "$NEW_VERSION") 87 | # alternatively always keep latest version installed and not the latest version from homebrew 88 | local VERSIONS_TO_UNINSTALL=$(printf '%s\n' "$INSTALLED_VERSIONS" | grep -v "$NEWEST_INSTALLED_VERSION") 89 | for i in $VERSIONS_TO_UNINSTALL 90 | do 91 | #echo $i 92 | # deleting version entry 93 | if [[ -e "$BREW_FORMULAE_PATH"/"$FORMULA"/"$i" && $(printf '%s\n' "$i") != "" ]] 94 | then 95 | rm -rf "$BREW_FORMULAE_PATH"/"$FORMULA"/"$i" 96 | else 97 | : 98 | fi 99 | # deleting metadata version entry 100 | if [[ -e "$BREW_FORMULAE_PATH"/"$FORMULA"/.metadata/"$i" && $(printf '%s\n' "$i") != "" ]] 101 | then 102 | rm -rf "$BREW_FORMULAE_PATH"/"$FORMULA"/.metadata/"$i" 103 | else 104 | : 105 | fi 106 | done 107 | else 108 | : 109 | fi 110 | done <<< "$(cat "$TMP_DIR_FORMULAE_VERSIONS"/"$DATE_LIST_FILE_FORMULAE_VERSIONS")" 111 | fi 112 | 113 | # checking if more than version is installed by using 114 | # brew list --versions 115 | 116 | } 117 | 118 | cleanup_casks() { 119 | if [[ ! -s "$TMP_DIR_CASK_VERSIONS"/"$DATE_LIST_FILE_CASKS_VERSIONS" ]] 120 | then 121 | # file is empty or does not exist 122 | : 123 | else 124 | # file exists and is not empty 125 | sort "$TMP_DIR_CASK_VERSIONS"/"$DATE_LIST_FILE_CASKS_VERSIONS" -o "$TMP_DIR_CASK_VERSIONS"/"$DATE_LIST_FILE_CASKS_VERSIONS" 126 | 127 | while IFS= read -r line || [[ -n "$line" ]] 128 | do 129 | if [[ "$line" == "" ]]; then continue; fi 130 | CASK=$(echo "$line" | awk '{print $2}') 131 | #echo '' 132 | #printf '%s\n' "$(printf '%s\n' "$line" | awk '{print $1}') versions of $CASK are installed..." 133 | #echo "uninstalling all outdated versions..." 134 | if [[ -e "$BREW_CASKS_PATH"/"$CASK" ]] 135 | then 136 | # uninstall old versions 137 | local CASK_INFO=$(brew cask info --json=v1 "$CASK" | jq '.[]') 138 | #local CASK_INFO=$(brew cask info "$CASK") 139 | local CASK_NAME=$(printf '%s\n' "$CASK_INFO" | jq -r '.name | .[]') 140 | #local CASK_NAME=$(printf '%s\n' "$CASK" | cut -d ":" -f1 | xargs) 141 | local NEW_VERSION=$(printf '%s\n' "$CASK_INFO" | jq -r '.version') 142 | #local NEW_VERSION=$(printf '%s\n' "$CASK_INFO" | grep -e "$CASK_NAME: .*" | cut -d ":" -f2 | head -1 | sed 's|(auto_updates)||g' | sed 's/^ *//' | sed 's/ *$//') 143 | local INSTALLED_VERSIONS=$(ls -1tc "$BREW_CASKS_PATH"/"$CASK") 144 | local NEWEST_INSTALLED_VERSION=$(printf '%s\n' "$INSTALLED_VERSIONS" | head -n 1) 145 | #local NEWEST_INSTALLED_VERSION="$NEW_VERSION" 146 | # alternatively always keep latest version installed and not the latest version from homebrew 147 | local VERSIONS_TO_UNINSTALL=$(printf '%s\n' "$INSTALLED_VERSIONS" | grep -v "$NEWEST_INSTALLED_VERSION") 148 | while IFS= read -r line || [[ -n "$line" ]] 149 | do 150 | if [[ "$line" == "" ]]; then continue; fi 151 | i="$line" 152 | #echo $i 153 | # deleting version entry 154 | if [[ -e "$BREW_CASKS_PATH"/"$CASK"/"$i" && $(printf '%s\n' "$i") != "" ]] 155 | then 156 | rm -rf "$BREW_CASKS_PATH"/"$CASK"/"$i" 157 | else 158 | : 159 | fi 160 | # deleting metadata version entry 161 | if [[ -e "$BREW_CASKS_PATH"/"$CASK"/.metadata/"$i" && $(printf '%s\n' "$i") != "" ]] 162 | then 163 | rm -rf "$BREW_CASKS_PATH"/"$CASK"/.metadata/"$i" 164 | else 165 | : 166 | fi 167 | done <<< "$(printf "%s\n" "${VERSIONS_TO_UNINSTALL[@]}")" 168 | 169 | # special actions on some casks 170 | if [[ "$CASK" == "adoptopenjdk" ]] || [[ "$CASK" == "java" ]] 171 | then 172 | JAVA_CHECK_DIR="/Library/Java/JavaVirtualMachines" 173 | LATEST_INSTALLED_JAVA_VERSION=$(ls -1 "$JAVA_CHECK_DIR" | sort -V | tail -n 1) 174 | JAVA_VERSIONS_TO_UNINSTALL=$(ls -1 "$JAVA_CHECK_DIR" | grep -v "$LATEST_INSTALLED_JAVA_VERSION") 175 | NUMBER_OF_JAVA_VERSIONS_TO_UNINSTALL=$(echo $JAVA_VERSIONS_TO_UNINSTALL | wc -l | awk '{print $1}') 176 | #printf '%s\n' "$NUMBER_OF_JAVA_VERSIONS_TO_UNINSTALL" 177 | if [[ "$NUMBER_OF_JAVA_VERSIONS_TO_UNINSTALL" -ge "1" ]] 178 | then 179 | echo "cleaning old java versions..." 180 | while IFS= read -r line || [[ -n "$line" ]] 181 | do 182 | if [[ "$line" == "" ]]; then continue; fi 183 | OLD_JAVA_VERSION="$line" 184 | if [[ -e "$JAVA_CHECK_DIR"/"$OLD_JAVA_VERSION" ]] 185 | then 186 | #printf '%s\n' "$OLD_JAVA_VERSION" 187 | sudo rm -rf "$JAVA_CHECK_DIR"/"$OLD_JAVA_VERSION" 188 | else 189 | : 190 | fi 191 | done <<< "$(printf "%s\n" "${JAVA_VERSIONS_TO_UNINSTALL[@]}")" 192 | else 193 | : 194 | #echo "no entries..." 195 | fi 196 | else 197 | : 198 | fi 199 | 200 | else 201 | : 202 | fi 203 | done <<< "$(cat "$TMP_DIR_CASK_VERSIONS"/"$DATE_LIST_FILE_CASKS_VERSIONS")" 204 | fi 205 | 206 | # checking if more than version is installed by using 207 | # brew cask list --versions 208 | 209 | } 210 | 211 | formulae_show_updates_parallel() { 212 | # always use _ instead of - because some sh commands called by parallel would give errors 213 | 214 | echo "listing brew formulae updates..." 215 | 216 | printf '\n' 217 | #printf '=%.0s' {1..80} 218 | # this does not work as printf does not know about the escape characters and interprets wrong column sizes 219 | # use tput instead 220 | # HEAD_COLUMN1=$(echo -e "\033[1mcask\033[0m") 221 | HEAD_COLUMN1=$(echo "formula") 222 | HEAD_COLUMN2=$(echo "installed") 223 | HEAD_COLUMN3=$(echo "latest") 224 | HEAD_COLUMN4=$(echo ' result') 225 | tput bold; printf "%+7s %-2s %-22s %-17s %-17s %-10s\n" "" "" "$HEAD_COLUMN1" "$HEAD_COLUMN2" "$HEAD_COLUMN3" "$HEAD_COLUMN4"; tput sgr0 226 | #printf '=%.0s' {1..80} 227 | #printf '\n' 228 | 229 | TMP_DIR_FORMULAE=/tmp/formulae_updates 230 | export TMP_DIR_FORMULAE 231 | 232 | # update formulae preparation 233 | if [[ -e "$TMP_DIR_FORMULAE" ]] 234 | then 235 | if [[ "$(ls -A $TMP_DIR_FORMULAE/)" ]] 236 | then 237 | rm "$TMP_DIR_FORMULAE"/* 238 | else 239 | : 240 | fi 241 | else 242 | : 243 | fi 244 | mkdir -p "$TMP_DIR_FORMULAE"/ 245 | DATE_LIST_FILE_FORMULAE=$(echo "brew_update"_$(date +%Y-%m-%d_%H-%M-%S).txt) 246 | export DATE_LIST_FILE_FORMULAE 247 | touch "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" 248 | 249 | # cleanup formulae preparation 250 | TMP_DIR_FORMULAE_VERSIONS=/tmp/formulae_versions 251 | export TMP_DIR_FORMULAE_VERSIONS 252 | if [[ -e "$TMP_DIR_FORMULAE_VERSIONS" ]] 253 | then 254 | if [[ "$(ls -A $TMP_DIR_FORMULAE_VERSIONS/)" ]] 255 | then 256 | rm "$TMP_DIR_FORMULAE_VERSIONS"/* 257 | else 258 | : 259 | fi 260 | else 261 | : 262 | fi 263 | mkdir -p "$TMP_DIR_FORMULAE_VERSIONS"/ 264 | DATE_LIST_FILE_FORMULAE_VERSIONS=$(echo "formulae_versions"_$(date +%Y-%m-%d_%H-%M-%S).txt) 265 | export DATE_LIST_FILE_FORMULAE_VERSIONS 266 | touch "$TMP_DIR_FORMULAE_VERSIONS"/"$DATE_LIST_FILE_FORMULAE_VERSIONS" 267 | 268 | formulae_show_updates_parallel_inside() { 269 | # always use _ instead of - because some sh commands called by parallel would give errors 270 | local FORMULA="$1" 271 | #echo FORMULA is "$FORMULA" 272 | #local FORMULA_INFO=$(brew info $FORMULA) 273 | FORMULA_INFO=$(brew info --json=v1 "$FORMULA" | jq '.[]') 274 | #echo FORMULA_INFO is $FORMULA_INFO 275 | #local FORMULA_NAME=$(printf '%s\n' "$FORMULA_INFO" | grep -e "$FORMULA: .*" | cut -d" " -f1 | sed 's/://g') 276 | local FORMULA_NAME=$(printf '%s\n' "$FORMULA_INFO" | jq -r '.name') 277 | # getting value directly 278 | #local FORMULA_NAME=$(brew info --json=v1 $FORMULA | jq -r '.[].name') 279 | #echo FORMULA_NAME is $FORMULA_NAME 280 | # make sure you have jq installed via brew 281 | #local FORMULA_REVISION=$(brew info "$FORMULA" --json=v1 | jq . | grep revision | grep -o '[0-9]') 282 | local FORMULA_REVISION=$(printf '%s\n' "$FORMULA_INFO" | jq -r '.revision') 283 | #echo FORMULA_REVISION is $FORMULA_REVISION 284 | if [[ "$FORMULA_REVISION" == "0" ]] 285 | then 286 | #local NEW_VERSION=$(printf '%s\n' "$FORMULA_INFO" | grep -e "$FORMULA: .*" | cut -d" " -f3 | sed 's/,//g') 287 | local NEW_VERSION=$(printf '%s\n' "$FORMULA_INFO" | jq -r '.versions.stable') 288 | else 289 | #local NEW_VERSION=$(echo $(printf '%s\n' "$FORMULA_INFO" | grep -e "$FORMULA: .*" | cut -d" " -f3 | sed 's/,//g')_"$FORMULA_REVISION") 290 | local NEW_VERSION=$(echo $(printf '%s\n' "$FORMULA_INFO" | jq -r '.versions.stable')_"$FORMULA_REVISION") 291 | fi 292 | #echo NEW_VERSION is $NEW_VERSION 293 | local NUMBER_OF_INSTALLED_FORMULAE=$(printf '%s\n' "$INSTALLED_FORMULAE" | wc -l | sed 's/^ *//' | sed 's/ *$//') 294 | local NUMBER_OF_FORMULA=$(printf '%s\n' "$INSTALLED_FORMULAE" | grep -n "^$FORMULA$" | awk -F: '{print $1}' | sed 's/^ *//' | sed 's/ *$//') 295 | local INSTALLED_VERSIONS=$(ls -1 "$BREW_FORMULAE_PATH"/"$FORMULA" | sort -V) 296 | #echo INSTALLED_VERSIONS is "$INSTALLED_VERSIONS" 297 | local NUMBER_OF_INSTALLED_VERSIONS=$(printf '%s\n' "$INSTALLED_VERSIONS" | wc -l | sed -e 's/^[ \t]*//') 298 | #echo NUMBER_OF_INSTALLED_VERSIONS is "$NUMBER_OF_INSTALLED_VERSIONS" 299 | local NEWEST_INSTALLED_VERSION=$(printf '%s\n' "$INSTALLED_VERSIONS" | tail -n 1) 300 | #echo NEWEST_INSTALLED_VERSION is "$NEWEST_INSTALLED_VERSION" 301 | local CHECK_RESULT=$(printf '%s\n' "$INSTALLED_VERSIONS" | grep -q "$NEW_VERSION" 2>&1 && echo ok || echo outdated) 302 | #echo CHECK_RESULT is $CHECK_RESULT 303 | local NAME_PRINT=$(printf '%s\n' "$FORMULA" | awk -v len=20 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }') 304 | local CURRENT_INSTALLED_VERSION_PRINT=$(printf '%s\n' "$NEWEST_INSTALLED_VERSION" | awk -v len=15 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }') 305 | #local CURRENT_INSTALLED_VERSION_PRINT=$(printf '%s\n' "$NEWEST_INSTALLED_VERSION" | cut -d ":" -f1 | awk -v len=15 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }') 306 | local NEW_VERSION_PRINT=$(printf '%s\n' "$NEW_VERSION" | awk -v len=15 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }') 307 | if [[ $CHECK_RESULT == "ok" ]] 308 | then 309 | CHECK_RESULT_PRINT=$(echo -e '\033[1;32m ok\033[0m') 310 | #CHECK_RESULT_PRINT=$(echo -e '\033[1;31m outdated\033[0m') 311 | elif 312 | [[ $CHECK_RESULT == "outdated" ]] 313 | then 314 | CHECK_RESULT_PRINT=$(echo -e '\033[1;31m outdated\033[0m') 315 | else 316 | : 317 | fi 318 | # output 319 | printf "%+7s %-2s %-22s %-17s %-17s %-10s\n" "$NUMBER_OF_FORMULA/$NUMBER_OF_INSTALLED_FORMULAE" " " "$NAME_PRINT" "$CURRENT_INSTALLED_VERSION_PRINT" "$NEW_VERSION_PRINT" "$CHECK_RESULT_PRINT" 320 | 321 | # installing if not up-to-date and not excluded 322 | if [[ "$CHECK_RESULT" == "outdated" ]] && [[ ${CASK_EXCLUDES} != *"$FORMULA"* ]] 323 | then 324 | echo "$FORMULA" >> "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" 325 | fi 326 | 327 | # cleanup entries 328 | if [[ "$NUMBER_OF_INSTALLED_VERSIONS" -gt "1" ]] 329 | then 330 | echo -e "$NUMBER_OF_INSTALLED_VERSIONS\t$FORMULA" >> "$TMP_DIR_FORMULAE_VERSIONS"/"$DATE_LIST_FILE_FORMULAE_VERSIONS" 331 | else 332 | : 333 | #echo "only one version installed..." 334 | fi 335 | 336 | } 337 | # by sourcing the respective env_parallel.SHELL the command itself can be used cross-shell 338 | # it is not neccessary to export variables or functions when using env_parallel 339 | # zsh does not support exporting functions, thats why parallels is prefered over xargs (bash only) 340 | if [[ "$(brew list)" != "" ]]; then env_parallel --will-cite -j"$NUMBER_OF_MAX_JOBS_ROUNDED" --line-buffer -k "formulae_show_updates_parallel_inside {}" ::: "$(brew list)"; fi 341 | 342 | #echo "listing brew formulae updates finished ;)" 343 | } 344 | 345 | formulae_install_updates() { 346 | echo "installing brew formulae updates..." 347 | 348 | if [[ ! -s "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" ]] 349 | then 350 | # file is empty or does not exist 351 | echo "no formulae updates available..." 352 | else 353 | # file exists and is not empty 354 | 355 | # sorting the outdated casks file after using parallel which can change output order 356 | sort "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" -o "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" 357 | 358 | while IFS= read -r line || [[ -n "$line" ]] 359 | do 360 | if [[ "$line" == "" ]]; then continue; fi 361 | FORMULA="$line" 362 | 363 | echo 'updating '"$FORMULA"'...' 364 | if [[ $(brew outdated --quiet | grep "^$FORMULA$") == "" ]] && [[ $(brew outdated --quiet | grep "/$FORMULA$") == "" ]] 365 | #[[ $(brew outdated --verbose | grep "^$FORMULA[[:space:]]") == "" ]] 366 | then 367 | echo "$FORMULA"" already up-to-date..." 368 | else 369 | if [[ "$FORMULA" == "qtfaststart" ]] 370 | then 371 | if [[ $(brew list | grep "^ffmpeg$") != "" ]] 372 | then 373 | brew unlink qtfaststart 374 | brew unlink ffmpeg && brew link ffmpeg 375 | brew link --overwrite qtfaststart 376 | else 377 | : 378 | fi 379 | elif [[ "$FORMULA" == "^ffmpeg$" ]] 380 | then 381 | if [[ $(brew list | grep "^qtfaststart$") != "" ]] 382 | then 383 | brew unlink ffmpeg 384 | brew unlink qtfaststart && brew link qtfaststart 385 | brew link --overwrite ffmpeg 386 | else 387 | : 388 | fi 389 | else 390 | : 391 | fi 392 | env_use_password | brew upgrade "$FORMULA" 393 | # 394 | fi 395 | echo 'removing old installed versions of '"$FORMULA"'...' 396 | env_use_password | brew cleanup "$FORMULA" 397 | echo '' 398 | 399 | # cleanup entries 400 | local INSTALLED_VERSIONS=$(ls -1 "$BREW_FORMULAE_PATH"/"$FORMULA" | sort -V) 401 | local NUMBER_OF_INSTALLED_VERSIONS=$(printf '%s\n' "$INSTALLED_VERSIONS" | wc -l | sed -e 's/^[ \t]*//') 402 | if [[ "$NUMBER_OF_INSTALLED_VERSIONS" -gt "1" ]] 403 | then 404 | echo -e "$NUMBER_OF_INSTALLED_VERSIONS\t$FORMULA" >> "$TMP_DIR_FORMULAE_VERSIONS"/"$DATE_LIST_FILE_FORMULAE_VERSIONS" 405 | else 406 | : 407 | #echo "only one version installed..." 408 | fi 409 | done <<< "$(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE")" 410 | 411 | # special ffmpeg 412 | # versions > 4.0.2_1 include h265 by default, so rebuilding does not seem to be needed any more 413 | if [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "ffmpeg") != "" ]] || [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "fdk-aac") != "" ]] || [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "sdl2") != "" ]] || [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "freetype") != "" ]] || [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "libass") != "" ]] || [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "libvorbis") != "" ]] || [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "libvpx") != "" ]] || [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "opus") != "" ]] || [[ $(cat "$TMP_DIR_FORMULAE"/"$DATE_LIST_FILE_FORMULAE" | grep "x265") != "" ]] 414 | then 415 | #env_use_password | brew reinstall ffmpeg --with-fdk-aac --with-sdl2 --with-freetype --with-libass --with-libvorbis --with-libvpx --with-opus --with-x265 416 | if [[ $(ffmpeg -codecs 2>&1 | grep "\-\-enable-libx265") == "" ]] 417 | then 418 | #echo "rebuilding ffmpeg due to components updates..." 419 | #env_use_password | HOMEBREW_DEVELOPER=1 brew reinstall --build-from-source ffmpeg --with-fdk-aac --with-sdl2 --with-freetype --with-libass --with-libvorbis --with-libvpx --with-opus --with-x265 420 | : 421 | else 422 | : 423 | fi 424 | else 425 | : 426 | fi 427 | 428 | echo "installing formulae updates finished ;)" 429 | 430 | fi 431 | } 432 | 433 | # selectively upgrade casks 434 | casks_show_updates_parallel() { 435 | # always use _ instead of - because some sh commands called by parallel would give errors 436 | echo "listing casks updates..." 437 | 438 | #printf '=%.0s' {1..80} 439 | printf '\n' 440 | # this does not work as printf does not know about the escape characters and interprets wrong column sizes 441 | # use tput instead 442 | # HEAD_COLUMN1=$(echo -e "\033[1mcask\033[0m") 443 | HEAD_COLUMN1=$(echo "cask") 444 | HEAD_COLUMN2=$(echo "installed") 445 | HEAD_COLUMN3=$(echo "latest") 446 | HEAD_COLUMN4=$(echo ' result') 447 | tput bold; printf "%+7s %-2s %-22s %-17s %-17s %-10s\n" "" "" "$HEAD_COLUMN1" "$HEAD_COLUMN2" "$HEAD_COLUMN3" "$HEAD_COLUMN4"; tput sgr0 448 | #printf '=%.0s' {1..80} 449 | #printf '\n' 450 | 451 | # update casks preparation 452 | TMP_DIR_CASK=/tmp/cask_updates 453 | export TMP_DIR_CASK 454 | if [[ -e "$TMP_DIR_CASK" ]] 455 | then 456 | if [[ "$(ls -A $TMP_DIR_CASK/)" ]] 457 | then 458 | rm "$TMP_DIR_CASK"/* 459 | else 460 | : 461 | fi 462 | else 463 | : 464 | fi 465 | mkdir -p "$TMP_DIR_CASK"/ 466 | DATE_LIST_FILE_CASKS=$(echo "casks_update"_$(date +%Y-%m-%d_%H-%M-%S).txt) 467 | export DATE_LIST_FILE_CASKS 468 | touch "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" 469 | 470 | # cleanup formulae preparation 471 | TMP_DIR_CASK_VERSIONS=/tmp/cask_versions 472 | export TMP_DIR_CASK_VERSIONS 473 | if [[ -e "$TMP_DIR_CASK_VERSIONS" ]] 474 | then 475 | if [[ "$(ls -A $TMP_DIR_CASK_VERSIONS/)" ]] 476 | then 477 | rm "$TMP_DIR_CASK_VERSIONS"/* 478 | else 479 | : 480 | fi 481 | else 482 | : 483 | fi 484 | mkdir -p "$TMP_DIR_CASK_VERSIONS"/ 485 | DATE_LIST_FILE_CASKS_VERSIONS=$(echo "casks_versions"_$(date +%Y-%m-%d_%H-%M-%S).txt) 486 | export DATE_LIST_FILE_CASKS_VERSIONS 487 | touch "$TMP_DIR_CASK_VERSIONS"/"$DATE_LIST_FILE_CASKS_VERSIONS" 488 | 489 | casks_show_updates_parallel_inside() { 490 | # always use _ instead of - because some sh commands called by parallel would give errors 491 | local CASK="$1" 492 | local CASK_INFO=$(brew cask info --json=v1 "$CASK" | jq '.[]') 493 | #local CASK_INFO=$(brew cask info "$CASK") 494 | local CASK_NAME=$(printf '%s\n' "$CASK_INFO" | jq -r '.name | .[]') 495 | #local CASK_NAME=$(printf '%s\n' "$CASK" | cut -d ":" -f1 | xargs) 496 | local NEW_VERSION=$(printf '%s\n' "$CASK_INFO" | jq -r '.version') 497 | #local NEW_VERSION=$(printf '%s\n' "$CASK_INFO" | grep -e "$CASK_NAME: .*" | cut -d ":" -f2 | head -1 | sed 's|(auto_updates)||g' | sed 's/^ *//' | sed 's/ *$//') 498 | local NUMBER_OF_INSTALLED_CASKS=$(printf '%s\n' "$INSTALLED_CASKS" | wc -l | sed 's/^ *//' | sed 's/ *$//') 499 | local NUMBER_OF_CASK=$(printf '%s\n' "$INSTALLED_CASKS" | grep -n "^$CASK$" | awk -F: '{print $1}' | sed 's/^ *//' | sed 's/ *$//') 500 | local INSTALLED_VERSIONS=$(ls -1tc "$BREW_CASKS_PATH"/"$CASK") 501 | #echo INSTALLED_VERSIONS is "$INSTALLED_VERSIONS" 502 | local NUMBER_OF_INSTALLED_VERSIONS=$(printf '%s\n' "$INSTALLED_VERSIONS" | wc -l | sed -e 's/^[ \t]*//') 503 | #echo NUMBER_OF_INSTALLED_VERSIONS is "$NUMBER_OF_INSTALLED_VERSIONS" 504 | local NEWEST_INSTALLED_VERSION=$(printf '%s\n' "$INSTALLED_VERSIONS" | head -n 1) 505 | #local NEWEST_INSTALLED_VERSION="$NEW_VERSION" 506 | #echo NEWEST_INSTALLED_VERSION is "$NEWEST_INSTALLED_VERSION" 507 | local CHECK_RESULT=$(printf '%s\n' "$INSTALLED_VERSIONS" | grep -q "$NEW_VERSION" 2>&1 && echo ok || echo outdated) 508 | #echo CHECK_RESULT is $CHECK_RESULT 509 | local CASK_NAME_PRINT=$(printf '%s\n' "$CASK" | awk -v len=20 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }') 510 | local CURRENT_INSTALLED_VERSION_PRINT=$(printf '%s\n' "$NEWEST_INSTALLED_VERSION" | awk -v len=15 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }') 511 | #local CURRENT_INSTALLED_VERSION_PRINT=$(printf '%s\n' "$NEWEST_INSTALLED_VERSION" | cut -d ":" -f1 | awk -v len=15 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }') 512 | local NEW_VERSION_PRINT=$(printf '%s\n' "$NEW_VERSION" | awk -v len=15 '{ if (length($0) > len) print substr($0, 1, len-3) "..."; else print; }') 513 | if [[ $CHECK_RESULT == "ok" ]] 514 | then 515 | CHECK_RESULT_PRINT=$(echo -e '\033[1;32m ok\033[0m') 516 | #CHECK_RESULT_PRINT=$(echo -e '\033[1;31m outdated\033[0m') 517 | elif 518 | [[ $CHECK_RESULT == "outdated" ]] 519 | then 520 | CHECK_RESULT_PRINT=$(echo -e '\033[1;31m outdated\033[0m') 521 | else 522 | : 523 | fi 524 | printf "%+7s %-2s %-22s %-17s %-17s %-10s\n" "$NUMBER_OF_CASK/$NUMBER_OF_INSTALLED_CASKS" " " "$CASK_NAME_PRINT" "$CURRENT_INSTALLED_VERSION_PRINT" "$NEW_VERSION_PRINT" "$CHECK_RESULT_PRINT" 525 | 526 | # installing if not up-to-date and not excluded 527 | if [[ "$CHECK_RESULT" == "outdated" ]] && [[ ${CASK_EXCLUDES} != *"$CASK"* ]] 528 | then 529 | echo "$CASK" >> "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" 530 | fi 531 | 532 | # cleanup entries 533 | if [[ "$NUMBER_OF_INSTALLED_VERSIONS" -gt "1" ]] 534 | then 535 | echo -e "$NUMBER_OF_INSTALLED_VERSIONS\t$CASK" >> "$TMP_DIR_CASK_VERSIONS"/"$DATE_LIST_FILE_CASKS_VERSIONS" 536 | else 537 | : 538 | #echo "only one version installed..." 539 | fi 540 | 541 | if [[ "$CONT_LATEST" =~ ^(yes|y)$ ]] 542 | then 543 | if [[ "$NEW_VERSION" == "latest" ]] && [[ ${CASK_EXCLUDES} != *"$CASK"* ]] 544 | then 545 | echo "$CASK" >> "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" 546 | fi 547 | else 548 | : 549 | fi 550 | 551 | } 552 | # by sourcing the respective env_parallel.SHELL the command itself can be used cross-shell 553 | # it is not neccessary to export variables or functions when using env_parallel 554 | # zsh does not support exporting functions, thats why parallels is prefered over xargs (bash only) 555 | if [[ "$(echo "$INSTALLED_CASKS")" != "" ]]; then env_parallel --will-cite -j"$NUMBER_OF_MAX_JOBS_ROUNDED" --line-buffer -k "casks_show_updates_parallel_inside {}" ::: "$(echo "$INSTALLED_CASKS")"; fi 556 | 557 | #echo "listing casks updates finished ;)" 558 | } 559 | 560 | casks_install_updates() { 561 | echo "installing casks updates..." 562 | 563 | if [[ ! -s "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" ]] 564 | then 565 | # file is empty or does not exist 566 | echo "no casks updates available..." 567 | else 568 | # file exists and is not empty 569 | 570 | # virtualbox has to be updated before virtualbox-extension-pack 571 | # checking if there is an update for virtualbox-extension-pack available, deleting the line in the file and install it manually later 572 | # done by sorting the file after using parallel which can change output order 573 | #if [[ $(cat "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" | grep virtualbox-extension-pack) == "" ]] 574 | #then 575 | # VIRTUALBOX_EXTENSION_UPDATE_AVAILABLE=no 576 | #else 577 | # VIRTUALBOX_EXTENSION_UPDATE_AVAILABLE=yes 578 | # sed -i '' '/virtualbox-extension-pack/d' "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" 579 | # sed -i '' '/virtualbox/d' "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" 580 | #fi 581 | #echo "$VIRTUALBOX_EXTENSION_UPDATE_AVAILABLE" 582 | 583 | # sorting the outdated casks file after using parallel which can change output order 584 | sort "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" -o "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" 585 | 586 | applications_to_reinstall=( 587 | "adobe-acrobat-reader" 588 | ) 589 | for i in "${applications_to_reinstall[@]}" 590 | do 591 | if [[ "$line" == "" ]]; then continue; fi 592 | if [[ $(cat "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" | grep "$i") != "" ]] 593 | then 594 | echo 'updating '"$i"'...' 595 | env_use_password | brew cask reinstall "$i" 596 | #sed -i "" "/""$i""/d" "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" 597 | sed -i '' '/'"$i"'/d' "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" 598 | echo '' 599 | else 600 | : 601 | fi 602 | done 603 | 604 | # updating all casks that are out of date 605 | while IFS= read -r line || [[ -n "$line" ]] 606 | do 607 | CASK="$line" 608 | 609 | echo 'updating '"$CASK"'...' 610 | 611 | # uninstall deletes autostart entries and resets all preferences of the uninstalled app 612 | #sudo brew cask uninstall "$line" --force 613 | #env_use_password | brew cask uninstall "$line" --force 1> /dev/null 614 | #sudo brew cask install "$line" --force 615 | # reinstall deletes autostart entries as it runs uninstall and then install 616 | #env_use_password | brew cask reinstall "$line" --force 617 | env_use_password | brew cask install "$CASK" --force 618 | echo '' 619 | 620 | if [[ "$CASK" == "teamviewer" ]] 621 | then 622 | sleep 2 623 | osascript -e "tell app \""$PATH_TO_APPS"/TeamViewer.app\" to quit" >/dev/null 2>&1 624 | sleep 2 625 | env_active_source_app 626 | fi 627 | if [[ "$CASK" == "libreoffice" ]] 628 | then 629 | PATH_TO_FIRST_RUN_APP=""$PATH_TO_APPS"/LibreOffice.app" 630 | env_set_open_on_first_run_permissions 631 | else 632 | : 633 | fi 634 | if [[ "$CASK" == "libreoffice-language-pack" ]] 635 | then 636 | LATEST_INSTALLED_LIBREOFFICE_LANGUAGE_PACK=$(ls -1 /usr/local/Caskroom/libreoffice-language-pack | sort -V | head -n 1) 637 | PATH_TO_FIRST_RUN_APP="/usr/local/Caskroom/libreoffice-language-pack/$LATEST_INSTALLED_LIBREOFFICE_LANGUAGE_PACK/LibreOffice Language Pack.app" 638 | env_set_open_on_first_run_permissions 639 | PATH_TO_FIRST_RUN_APP=""$PATH_TO_APPS"/LibreOffice.app" 640 | env_set_open_on_first_run_permissions 641 | else 642 | : 643 | fi 644 | if [[ "$CASK" == "zoomus" ]] 645 | then 646 | sleep 2 647 | osascript -e "tell app \""$PATH_TO_APPS"/zoom.us.app\" to quit" >/dev/null 2>&1 648 | sleep 2 649 | env_active_source_app 650 | fi 651 | 652 | # cleanup entries 653 | local INSTALLED_VERSIONS=$(ls -1tc "$BREW_CASKS_PATH"/"$CASK") 654 | local NUMBER_OF_INSTALLED_VERSIONS=$(printf '%s\n' "$INSTALLED_VERSIONS" | wc -l | sed -e 's/^[ \t]*//') 655 | if [[ "$NUMBER_OF_INSTALLED_VERSIONS" -gt "1" ]] 656 | then 657 | echo -e "$NUMBER_OF_INSTALLED_VERSIONS\t$CASK" >> "$TMP_DIR_CASK_VERSIONS"/"$DATE_LIST_FILE_CASKS_VERSIONS" 658 | else 659 | : 660 | #echo "only one version installed..." 661 | fi 662 | done <<< "$(cat "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS")" 663 | 664 | echo "installing casks updates finished ;)" 665 | 666 | fi 667 | 668 | } 669 | 670 | post_cask_installations() { 671 | 672 | ### manual installations after install 673 | 674 | #if [[ "$VIRTUALBOX_EXTENSION_UPDATE_AVAILABLE" == "yes" ]] 675 | #then 676 | # env_start_sudo 677 | # echo 'updating virtualbox...' 678 | # env_use_password | brew cask reinstall virtualbox --force 679 | # echo '' 680 | # echo 'updating virtualbox-extension-pack...' 681 | # env_use_password | brew cask reinstall virtualbox-extension-pack --force 682 | # env_stop_sudo 683 | # echo '' 684 | #else 685 | # : 686 | #fi 687 | 688 | # making sure to have the latest version of macosfuse after installing virtualbox (which often ships with an outdated version) 689 | if [[ $(cat "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" | grep "^virtualbox$") != "" ]] 690 | then 691 | echo '' 692 | echo "updating macosfuse after virtualbox update..." 693 | env_use_password | brew cask install --force osxfuse 694 | else 695 | : 696 | fi 697 | 698 | if [[ $(cat "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" | grep "^libreoffice-language-pack$") != "" ]] 699 | then 700 | echo '' 701 | echo "installing libreoffice language pack..." 702 | LATEST_INSTALLED_LIBREOFFICE_LANGUAGE_PACK=$(ls -1 /usr/local/Caskroom/libreoffice-language-pack | sort -V | head -n 1) 703 | open "/usr/local/Caskroom/libreoffice-language-pack/$LATEST_INSTALLED_LIBREOFFICE_LANGUAGE_PACK/LibreOffice Language Pack.app" 704 | #echo '' 705 | else 706 | : 707 | fi 708 | 709 | if [[ $(cat "$TMP_DIR_CASK"/"$DATE_LIST_FILE_CASKS" | grep "^textmate$") != "" ]] 710 | then 711 | # removing quicklook syntax highlight 712 | if [[ -e "$PATH_TO_APPS"/TextMate.app/Contents/Library/QuickLook/TextMateQL.qlgenerator ]] 713 | then 714 | rm -rf "$PATH_TO_APPS"/TextMate.app/Contents/Library/QuickLook/TextMateQL.qlgenerator 715 | else 716 | : 717 | fi 718 | # reset quicklook and quicklook cache if neccessary 719 | #qlmanage -r 720 | #qlmanage -r cache 721 | else 722 | : 723 | fi 724 | 725 | } 726 | 727 | ### 728 | ### running script 729 | ### 730 | 731 | #printf "\033c" 732 | printf "\ec" 733 | 734 | echo '' 735 | #echo "updating homebrew, formulae and casks..." 736 | #echo -e "\033[1mupdating homebrew, formulae and casks...\033[0m" 737 | echo "${bold_text}updating homebrew, formulae and casks...${default_text}" 738 | echo '' 739 | 740 | echo "script is run with $SCRIPT_INTERPRETER interpreter..." 741 | #echo '' 742 | 743 | unset_variables() { 744 | unset SUDOPASSWORD 745 | unset USE_PASSWORD 746 | unset TMP_DIR_FORMULAE 747 | unset TMP_DIR_CASK 748 | unset DATE_LIST_FILE_FORMULAE 749 | unset DATE_LIST_FILE_CASKS 750 | unset BREW_FORMULAE_PATH 751 | unset BREW_CASKS_PATH 752 | } 753 | 754 | 755 | ### trapping 756 | trap_function_exit_middle() { env_stop_sudo; unset SUDOPASSWORD; unset USE_PASSWORD; } 757 | "${ENV_SET_TRAP_SIG[@]}" 758 | "${ENV_SET_TRAP_EXIT[@]}" 759 | 760 | # creating directory and adjusting permissions 761 | echo "checking directory structure and permissions..." 762 | echo '' 763 | 764 | if [[ ! -d /usr/local ]]; 765 | then 766 | sudo mkdir /usr/local 767 | fi 768 | #sudo chown -R "$USER":staff /usr/local 769 | sudo chown -R $(whoami) /usr/local 770 | 771 | # checking if homebrew is installed 772 | if command -v brew &> /dev/null 773 | then 774 | # installed 775 | echo "homebrew is installed..." 776 | else 777 | # not installed 778 | echo "homebrew not installed, exiting script..." 779 | exit 780 | fi 781 | 782 | # as of 2018-10-31 brew cask --version is deprecated 783 | #brew cask --version 2>&1 >/dev/null 784 | #if [[ $? -eq 0 ]] 785 | if [[ $(brew --version | grep homebrew-cask) != "" ]] 786 | then 787 | echo "homebrew-cask is installed..." 788 | else 789 | echo "homebrew-cask not installed, skipping respective script parts..." 790 | HOMEBREW_CASK_IS_INSTALLED="no" 791 | fi 792 | #echo '' 793 | 794 | # checking if online 795 | env_check_if_online 796 | if [[ "$ONLINE_STATUS" == "online" ]] 797 | then 798 | # online 799 | echo '' 800 | 801 | env_identify_terminal 802 | 803 | env_start_sudo 804 | 805 | env_command_line_tools_install_shell 806 | 807 | # keeping homebrew from updating each time "brew" is used 808 | export HOMEBREW_NO_AUTO_UPDATE=1 809 | 810 | # checking if all script dependencies are installed 811 | echo '' 812 | echo "checking for script dependencies..." 813 | if command -v parallel &> /dev/null && command -v jq &> /dev/null 814 | then 815 | # installed 816 | echo "all script dependencies installed..." 817 | else 818 | echo "not all script dependencies installed, installing..." 819 | env_use_password | brew install jq parallel 820 | fi 821 | 822 | # number of parallel processes depending on cpu-cores 823 | number_of_parallel_processes 824 | 825 | # raising ulimit for more allowed parallel processes 826 | ulimit -n 512 827 | 828 | # checking if all formula dependencies are installed 829 | #echo '' 830 | echo "checking for formula dependencies..." 831 | if [[ $(brew missing) == "" ]] 832 | then 833 | echo "all formula dependencies installed..." 834 | : 835 | else 836 | echo "not all formula dependencies installed, installing..." 837 | brew install $(brew missing | awk '{print $NF}' | awk '!a[$0]++') 838 | # or 839 | #brew install $(brew missing | awk '{print $NF}' | sort | uniq) 840 | fi 841 | #echo '' 842 | 843 | # will exclude these apps from updating 844 | # pass in params to fit your needs 845 | # use the exact brew/cask name and separate names with a pipe | 846 | FORMULA_EXCLUDES="${1:-}" 847 | CASK_EXCLUDES="${2:-}" 848 | 849 | # more variables 850 | echo '' 851 | BREW_PATH=$(brew --repository) 852 | export BREW_PATH 853 | if [[ $(echo "$BREW_PATH") == "" || ! -e "$BREW_PATH" ]] 854 | then 855 | echo "homebrew path is empty or does not exist, exiting script..." 856 | exit 857 | else 858 | echo "homebrew is located in "$BREW_PATH"" 859 | fi 860 | 861 | BREW_FORMULAE_PATH=$(brew --cellar) 862 | export BREW_FORMULAE_PATH 863 | if [[ $(echo "$BREW_FORMULAE_PATH") == "" || ! -e "$BREW_FORMULAE_PATH" ]] 864 | then 865 | echo "homebrew formulae path is empty or does not exist, exiting script..." 866 | exit 867 | else 868 | echo "homebrew formulae are located in "$BREW_FORMULAE_PATH"" 869 | fi 870 | 871 | # 872 | BREW_CASKS_PATH=$(brew cask doctor 2>/dev/null | grep -A1 -B1 "Cask Staging Location" | tail -1) 873 | export BREW_CASKS_PATH 874 | if [[ $(echo "$BREW_CASKS_PATH") == "" || ! -e "$BREW_CASKS_PATH" ]] 875 | then 876 | echo "homebrew casks path is empty or does not exist, skipping respective script parts..." 877 | HOMEBREW_CASK_IS_INSTALLED="no" 878 | else 879 | HOMEBREW_CASK_IS_INSTALLED="yes" 880 | echo "homebrew casks are located in "$BREW_CASKS_PATH"" 881 | fi 882 | #echo '' 883 | 884 | env_sudo_homebrew 885 | 886 | #VARIABLE_TO_CHECK="$CONT_LATEST" 887 | #QUESTION_TO_ASK='do you want to update all installed casks that show "latest" as version (y/N)? ' 888 | #env_ask_for_variable 889 | #CONT_LATEST="$VARIABLE_TO_CHECK" 890 | CONT_LATEST="no" 891 | 892 | env_homebrew_update 893 | # 894 | echo '' 895 | export INSTALLED_FORMULAE=$(brew list | cat) 896 | formulae_show_updates_parallel 897 | # 898 | if [[ $(echo "$HOMEBREW_CASK_IS_INSTALLED") == "yes" ]] 899 | then 900 | echo '' 901 | export INSTALLED_CASKS=$(brew cask list | cat) 902 | casks_show_updates_parallel 903 | else 904 | : 905 | fi 906 | # 907 | echo '' 908 | formulae_install_updates 909 | # 910 | if [[ $(echo "$HOMEBREW_CASK_IS_INSTALLED") == "yes" ]] 911 | then 912 | echo '' 913 | casks_install_updates 914 | else 915 | : 916 | fi 917 | # 918 | echo '' 919 | echo "cleaning up..." 920 | env_cleanup_all_homebrew & pids+=($!) 921 | if [[ $(echo "$HOMEBREW_CASK_IS_INSTALLED") == "yes" ]] 922 | then 923 | cleanup_formulae & pids+=($!) 924 | cleanup_casks & pids+=($!) 925 | else 926 | cleanup_formulae & pids+=($!) 927 | fi 928 | wait "${pids[@]}" 929 | 930 | echo 'cleaning finished ;)' 931 | 932 | if [[ $(echo "$HOMEBREW_CASK_IS_INSTALLED") == "yes" ]] 933 | then 934 | post_cask_installations 935 | else 936 | : 937 | fi 938 | 939 | # done in trap 940 | #env_stop_sudo 941 | 942 | else 943 | # offline 944 | echo "skipping updates..." 945 | fi 946 | 947 | 948 | # done 949 | echo '' 950 | echo "script done ;)" 951 | echo '' 952 | 953 | 954 | 955 | ### 956 | ### unsetting variables 957 | ### 958 | 959 | unset_variables 960 | 961 | # kill all child and grandchild processes 962 | #ps -o pgid= $$ | grep -o '[0-9]*' 963 | #kill -9 -$(ps -o pgid= $$ | grep -o '[0-9]*') 964 | 965 | exit 966 | -------------------------------------------------------------------------------- /handbrake-batchconvert.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | ############################################################################### 4 | # 5 | # Script to recursively search a directory and batch convert all files of a given 6 | # file type into another file type via HandBrake conversion. 7 | # 8 | # To run in your environment set the variables: 9 | # hbcli - Path to your HandBrakeCLI 10 | # 11 | # dirs - Array of starting directories for recursive search 12 | # 13 | # input_file_type - Input file type to search for 14 | # 15 | # output_file_type - Output file type to convert into 16 | # 17 | ############################################################################### 18 | 19 | hbcli=/Applications/HandBrakeCLI/HandBrakeCLI 20 | input_file_type="avi" 21 | output_file_type="m4v" 22 | 23 | dirs=( '/dir1' 24 | '/dir2' ) 25 | 26 | 27 | ############################################################################### 28 | 29 | echo "# Using HandBrakeCLI at $hbcli" 30 | echo "# Converting $input_file_type to $output_file_type" 31 | 32 | # Convert from one file to another 33 | convert() { 34 | # The beginning part, echo "" | , is really important. Without that, HandBrake exits the while loop. 35 | echo ""# | $hbcli -i "$1" -o "$2" --preset="Universal"; 36 | } 37 | 38 | # Iterate over the array of directories 39 | for i in "${dirs[@]}" 40 | do 41 | echo "Processing source directory: " $i 42 | 43 | # Find the files and pipe the results into the read command because the read command properly handles spaces in directories and files names. 44 | find "$i" -name *.$input_file_type | while read in_file 45 | do 46 | echo "Processing file..." 47 | echo ">Input "$in_file 48 | 49 | # Replace the file type 50 | out_file=$(echo $in_file|sed "s/\(.*\.\)$input_file_type/\1$output_file_type/g") 51 | echo ">Output "$out_file 52 | 53 | # Convert the file 54 | convert "$in_file" "$out_file" 55 | 56 | if [ $? != 0 ] 57 | then 58 | echo "$in_file had problems" >> handbrake-errors.log 59 | fi 60 | 61 | echo ">Finished "$out_file "\n\n" 62 | done 63 | done 64 | 65 | echo "DONE CONVERTING FILES" 66 | echo -en "\007" 67 | echo -en "\007" 68 | echo -en "\007" 69 | --------------------------------------------------------------------------------