我正在尝试运行一个命令示例:
sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/
它在终端上运行良好,但是当我尝试在 shell 脚本中添加它时(.sh
)出现错误:
mv: cannot stat '/home/vaishnavi/Downloads/*.ttf': No such file or directory
简单来说,我想将所有文件.ttf
和.ttc
类型移动到/usr/local/share/fonts/ms_fonts/
。坦率地说,我对 shell 脚本不太熟悉。请向我解释我做错了什么,以及实现我预期结果的替代方法。
我的示例脚本:
sudo mv /home/vaishnavi/Downloads/*.ttc /home/vaishnavi/Downloads/*.ttf /usr/local/share/fonts/ms_fonts/
...
exit 0
答案1
如果那里没有 *.ttf 文件,您将收到此错误。默认情况下,如果没有文件与 glob 模式匹配,则模式本身将保留在命令中。使用 bash nullglob
shell 选项关闭此功能
为了更安全一点,请验证确实有一些文件需要移动:
#!/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