我正在尝试在 shell 脚本中执行以下命令,adir="mydir"
其中extType=*.txt
cp "$adir/$extType" "$destination"
但是我得到:
cp: cannot stat ‘mydir/*.txt’: No such file or directory
但是有这样的目录,如果我在命令行中手动执行它,它就可以工作。
知道哪里出了问题吗?
答案1
您应该更改"$adir/$extType"
为,"$adir/"$extType
否则不会进行全局扩展,并且它会查找一个*.txt
无法找到的名称的文件,因此它会对此抱怨:
cp: cannot stat ‘mydir/*.txt’: No such file or directory
答案2
Ravexina 已经很好地指出了通配符在双引号或单引号中不起作用,并且 cp 语法对于多个文件/单个目的地是错误的,需要 -t 标志。
你也可以使用 bash 数组:
extType=( "$adir"/*.txt )
cp -t "$destination" "${extType[@]}"
或者,循环
for i in "$adir"/*.txt ; do cp "$i" "$destination"; done