Я пишу скрипт для пакетного изменения размеров изображений. Первоначально я применял операцию for file in $(ls $1)
, но я хотел бы иметь возможность использовать глобирование, поэтому я смотрю на что-то более похожее на for file in $(echo $1)
. Проблема в том, что dotglob может включаться или не включаться, поэтому echo *
может возвращать скрытые файлы (в частности, .DS_Store), в результате чего convert
выдает ошибку и останавливает скрипт. Мне бы хотелось, чтобы стандартное поведение команды было , что если я cd
войду в каталог, полный изображений и выполню resize * 400x400 jpg
, все изображения будут изменены , исключая скрыто файлы, независимо от того, включен ли dotglob.
Итак, в псевдокоде Я ищу :
for file in $(echo $1 | [filter-hidden-files])
Вот мой скрипт с старым поведением . Будет обновляться с новым поведением, когда я найду решение:
# !/bin/bash
# resize [folder] [sizeXxsizeY] [outputformat]
# if [outputformat] is omitted, the input file format is assumed
for file in $(ls $1)
do
IMGNAME=$(echo "$file" | cut -d'.' -f1)
if test -z $3
then
EXTENSION=$(echo "$file" | cut -d'.' -f2)
convert $1/$file -resize $2 -quality 100 $1/$IMGNAME-$2.$EXTENSION
echo "$file => $IMGNAME-$2.$EXTENSION"
else
convert $1/$file -resize $2 -quality 100 $1/$IMGNAME-$2.$3
echo "$file => $IMGNAME-$2.$3"
fi
done
Вот текущий скрипт:
# !/bin/bash
# resize [pattern] [sizeXxsizeY] [outputformat]
# if [outputformat] is omitted, the input file format is assumed
for file in $(echo $1)
do
IMGNAME=$(echo "$file" | cut -d'.' -f1)
if test -z $3 && if test -f $3
then
EXTENSION=$(echo "$file" | cut -d'.' -f2)
convert $file -resize $2 -quality 100 $IMGNAME-$2.$EXTENSION
echo "$file => $IMGNAME-$2.$EXTENSION"
else
convert $file -resize $2 -quality 100 $IMGNAME-$2.$3
echo "$file => $IMGNAME-$2.$3"
fi
done
Учитывая команду resize * 400x400
, convert выдает ошибку, так как не может обработать .DS_Store (скрытый файл, находящийся в каждом файле в системе OSX). Поскольку я никогда не буду обрабатывать скрытые изображения, я хотел бы автоматически их фильтровать. Я пытался сделать это с помощью grep или find, но пока не понял.
Новый скрипт идет сюда:
for file in $(echo $1)
do