Gunakan '*' dalam skrip shell
Saya mencoba menjalankan contoh perintah:
sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/
Ini berfungsi dengan baik di terminal, tetapi ketika saya mencoba menambahkan ini di skrip shell ( .sh) saya mendapatkan kesalahan yang mengatakan:
mv: cannot stat '/home/vaishnavi/Downloads/*.ttf': No such file or directory
Sederhananya, saya ingin memindahkan semua file .ttfdan .ttcjenis ke /usr/local/share/fonts/ms_fonts/, dalam kasus ini. Terus terang, saya tidak begitu ahli dalam skrip shell. Tolong jelaskan kepada saya kesalahan apa yang saya lakukan dan juga alternatif untuk mencapai hasil yang saya harapkan.
Contoh skrip saya:
sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/
...
exit 0
Jawaban
Anda akan mendapatkan kesalahan ini jika tidak ada file * .ttf di sana. Secara default, jika tidak ada file yang cocok dengan pola glob, maka pola itu sendiri tetap ada di perintah. Matikan ini dengan opsi bash nullglobshell
Agar sedikit lebih aman, pastikan bahwa sebenarnya ada beberapa file yang akan dipindahkan:
#!/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