【发布时间】:2020-05-04 20:57:37
【问题描述】:
一个非常简单但困扰我的问题。我想将一个文件夹中的所有文件复制到 shell 脚本中的另一个文件夹。像这样:
#!/bin/sh
cp data/* /tmp/data
但是得到了error: zsh:1: no matches found: data/*
阅读有关 * 的各种帖子,例如:Copying files with wildcard (*) to a folder in a bash script - why isn't it working? 我试过了:
cp "data"/* /tmp/data
Error: zsh:1: no matches found: data/*
cp -r data /tmp/data
Error cp: cannot stat `data': No such file or directory
我可以验证数据文件夹是否包含文件,并且我在父目录数据文件夹中。如果我在脚本中执行ls data,它的内容就会正确打印出来。
有人可以帮忙吗?我正在使用 zsh。
【问题讨论】:
-
运行脚本时当前的工作目录是什么? (也就是说,如果你在调用
cp之前调用pwd,输出是什么? -
如何运行脚本?我很惊讶您在第 1 行收到关于
data/*的 zsh 错误,而这是sh脚本,其中第 1 行是注释。 -
@chepner 当前目录是数据的父目录。就像我说的,如果我在脚本中的 cp 命令之后添加
ls data,它将正确打印文件夹内容。 -
@thatotherguy 实际上有一个包装外壳脚本来运行子脚本中的多个命令,它分别运行每个命令。整套工作正常,但最近
cp在迁移到新机器后坏了。我可以对数据文件夹执行ls,但cp不起作用。 -
数据文件夹是如何创建的?我正在描绘这样的场景:您有一个带有 DOS 行结尾的脚本,该脚本执行了一个类似
mkdir data的命令,这导致创建了一个名为data\r的目录(\r代表一个回车符)。您的cp命令失败,因为目录名称是data\r,而不是data,但ls data成功的原因与mkdir data创建错误目录名称的原因相同:data是该行的最后一个参数。