J'écris un script pour redimensionner les images par lots. A l'origine, j'appliquais une opération for file in $(ls $1)
, mais je voudrais pouvoir utiliser la globbing, donc je regarde quelque chose de plus comme for file in $(echo $1)
. Le problème est que dotglob peut ou ne peut pas être activé, donc echo *
peut renvoyer des fichiers cachés (notamment, .DS_Store), ce qui provoque convert
pour lancer une erreur et arrêter le script. Je voudrais que le comportement par défaut de la commande soit que si je cd
dans un répertoire plein d'images et exécute resize * 400x400 jpg
, toutes les images seront redimensionnées à l'exclusion fichiers cachés, indépendamment du fait que dotglob est activé.Filtrer les fichiers cachés avec Bash (pour le script de redimensionnement d'image par lots)
Ainsi, dans le code pseudo, Je cherche:
for file in $(echo $1 | [filter-hidden-files])
Voici mon script avec le comportement plus . Mettra à jour avec un nouveau comportement quand je trouve une solution:
# !/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
Voici le script en cours :
# !/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
Compte tenu de la commande resize * 400x400
, convertir renvoie une erreur car il ne peut pas traiter .DS_Store (un fichier caché résidant dans chaque fichier sur un système OSX). Comme je ne traiterai jamais d'images cachées, je voudrais les filtrer automatiquement. J'ai essayé de le faire avec grep ou trouver, mais je ne l'ai pas encore compris.
Nouveau script va ici:
for file in $(echo $1)
do
Vous pouvez éliminer l'appel à l'extérieur 'cut':' IMGNAME = $ {fichier # # *.} ' –