Используйте '*' в сценарии оболочки

Я пытаюсь запустить пример команды:

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

Он отлично работает в терминале, но когда я пытаюсь добавить это в сценарий оболочки ( .sh ), я получаю сообщение об ошибке:

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

Просто я хочу переместить все файлы типа .ttf и .ttc в / usr / local / share / fonts / ms_fonts / в этом дело.Честно говоря, я не очень разбираюсь в сценариях оболочки. Пожалуйста, объясните мне, что я сделал не так, а также альтернативу для достижения ожидаемых результатов.

Мой пример сценария:

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

exit 0
4
задан 14 October 2020 в 14:22

1 ответ

Вы получите эту ошибку, если там нет файлов *.ttf. По умолчанию, если ни один файл не соответствует шаблону глобуса, сам шаблон остается в команде. Отключите это с помощью параметра оболочки bash nullglob

Чтобы быть немного безопаснее, убедитесь, что действительно есть файлы для перемещения:

#!/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
3
ответ дан 14 October 2020 в 12:32

Другие вопросы по тегам:

Похожие вопросы: