web-dev-qa-db-fra.com

Le moyen le plus simple de vérifier l'extension de fichier dans bash?

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
18
Liam

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
41
rici

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
26
jthill

Vous pouvez essayer quelque chose comme ça: -

if [[ ${file: -3} == ".gz" ]]
11
Rahul Tripathi