Use o '*' no script de shell
Estou tentando executar um exemplo de comando:
sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/
Funciona bem no terminal, mas quando tento adicionar isso em um script de shell ( .sh), recebo um erro dizendo:
mv: cannot stat '/home/vaishnavi/Downloads/*.ttf': No such file or directory
Simplesmente, desejo mover todos os arquivos de .ttfe .ttcdigitar para /usr/local/share/fonts/ms_fonts/, neste caso. Falando francamente, não sou tão especialista em scripts de shell. Explique-me o que fiz de errado e também uma alternativa para alcançar os resultados esperados.
Meu script de exemplo:
sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/
...
exit 0
Respostas
Você obterá este erro se não houver arquivos * .ttf lá. Por padrão, se nenhum arquivo corresponder a um padrão glob, o próprio padrão permanecerá no comando. Desligue isto com a nullglobopção bash shell
Para ficar um pouco mais seguro, verifique se realmente há alguns arquivos 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