Получить путь как из локального каталога, так и из каталога 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"