Получить путь как из локального каталога, так и из каталога iCloud.

У меня есть сценарий быстрого действия Automator, который преобразует PNG в ICNS, сохраняя как исходное имя файла, так и его исходное положение. Однако если сценарий используется внутри папки iCloud или папки с пробелом в имени, он не будет работать.

      #!/bin/sh

s=$1
NAME="${s%.*}"

ICONSET="$NAME.iconset"
mkdir $ICONSET

sips -z 1024 1024 $1 --out $ICONSET/icon_512x512@2x.png
sips -z 512  512  $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_512x512.png
sips -z 512  512  $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_256x256@2x.png
sips -z 256  256  $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_256x256.png
sips -z 256  256  $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_128x128@2x.png
sips -z 128  128  $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_128x128.png
sips -z 64   64   $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_32x32@2x.png
sips -z 32   32   $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_32x32.png
sips -z 32   32   $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_16x16@2x.png
sips -z 16   16   $ICONSET/icon_512x512@2x.png --out $ICONSET/icon_16x16.png

iconutil -c icns $ICONSET

rm -rf $ICONSET

Как мне получить текущий путь — локальный или iCloud — и заставить скрипт работать в папках, имена которых содержат пробелы?

1 ответ

Будьте более последовательны в кавычках, чтобы обрабатывать специальные символы, например пробелы, в имени.

Вы также можете написать его как цикл for, чтобы предотвратить ошибки копирования/вставки для повторяющихся задач.

Предполагая$1это обычный файл, который можно прочитать несколько раз:

      #!/bin/bash

s="$1"
NAME="${s%.*}"

ICONSET="$NAME.iconset"
mkdir -p "$ICONSET"

for res in 512 256 128 64 32 16; do
    x2=$((res * 2))
    sips -z $x2  $x2  "$1" --out "$ICONSET/icon_${res}x${res}@2x.png"
    sips -z $res $res "$1" --out "$ICONSET/icon_${res}x${res}.png"
done

iconutil -c icns "$ICONSET"

rm -rf "$ICONSET"
Другие вопросы по тегам