Utilisez le '*' dans le script shell
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
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