Utilice el '*' en el script de shell

Oct 14 2020

Estoy tratando de ejecutar un ejemplo de comando:

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

Funciona bien en la terminal, pero cuando intento agregar esto en un script de shell ( .sh), aparece un error que dice:

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

Simplemente, quiero mover todos los archivos de .ttfy .ttcescribir a /usr/local/share/fonts/ms_fonts/, en este caso. Hablando francamente, no soy tan experto en scripts de shell. Explíqueme qué mal hice y también una alternativa para lograr los resultados esperados.

Mi script de muestra:

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

exit 0

Respuestas

3 glennjackman Oct 14 2020 at 19:32

Obtendrá este error si no hay archivos * .ttf allí. De forma predeterminada, si ningún archivo coincide con un patrón global, el patrón permanece en el comando. Desactive esto con la nullglobopción de shell bash

Para estar un poco más seguro, verifique que en realidad haya algunos archivos para mover:

#!/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