Utilice el '*' en el script de shell
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
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