Utilisez le '*' dans le script shell

Oct 14 2020

J'essaye d'exécuter un exemple de commande:

sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/

Cela fonctionne bien dans le terminal, mais lorsque j'essaie d'ajouter ceci dans un script shell ( .sh), j'obtiens une erreur disant:

mv: cannot stat '/home/vaishnavi/Downloads/*.ttf': No such file or directory

Simplement, je veux déplacer tous les fichiers .ttfet .ttctaper vers /usr/local/share/fonts/ms_fonts/, dans ce cas. Franchement, je ne suis pas aussi expert en scripts shell. Veuillez m'expliquer ce que j'ai fait de mal et aussi une alternative pour atteindre les résultats escomptés.

Mon exemple de script:

sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/  
...

exit 0

Réponses

3 glennjackman Oct 14 2020 at 19:32

Vous obtiendrez cette erreur s'il n'y a pas de fichiers * .ttf. Par défaut, si aucun fichier ne correspond à un modèle global, le modèle lui-même reste dans la commande. Désactivez cette nullgloboption avec l' option bash shell

Pour être un peu plus sûr, vérifiez qu'il y a effectivement des fichiers à déplacer:

#!/usr/bin/env bash
...
shopt -s nullglob
# store files in an array
files=( /home/vaishnavi/Downloads/*.{ttc,ttf} )
# and if the array is not empty, move the files.
if (( ${#files[@]} > 0 )); then sudo mv -t /usr/local/share/fonts/ms_fonts/ "${files[@]}" 
fi