J'ai un script Shell où j'ai besoin de faire une commande si un fichier est compressé (se termine par .gz) et un autre si ce n'est pas le cas. Je ne sais pas vraiment comment aborder cela, voici un aperçu de ce que je recherche:
file=/path/name*
if [ CHECK FOR .gz ]
then echo "this file is zipped"
else echo "this file is not zipped"
fi
Vous pouvez le faire avec une expression régulière simple, en utilisant le =~
opérateur dans un [[...]]
test:
if [[ $file =~ \.gz$ ]];
Cela ne vous donnera pas la bonne réponse si l'extension est .tgz
, si cela vous intéresse. Mais c'est facile à réparer:
if [[ $file =~ \.t?gz$ ]];
L'absence de guillemets autour de l'expression régulière est nécessaire et importante. Vous pourriez citer $file
mais ça ne sert à rien.
Il serait probablement préférable d'utiliser l'utilitaire file
:
$ file --mime-type something.gz
something.gz: application/x-gzip
Quelque chose comme:
if file --mime-type "$file" | grep -q gzip$; then
echo "$file is gzipped"
else
echo "$file is not gzipped"
fi
Vraiment, le moyen le plus clair et souvent le plus simple de faire correspondre des modèles comme celui-ci dans un script Shell est avec case
case "$f" in
*.gz | *.tgz )
# it's gzipped
;;
*)
# it's not
;;
esac
Vous pouvez essayer quelque chose comme ça: -
if [[ ${file: -3} == ".gz" ]]