2016-11-11 314 views
0

一个非常简单的问题,但困扰我。我想将一个文件夹中的所有文件复制到shell脚本中的另一个文件夹中。就像这样: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 

我可以验证数据文件夹中包含的文件,而且我m在父目录数据文件夹中。如果我在脚本中使用ls data,则其内容将被正确打印。

任何人都可以帮忙吗?我正在使用zsh。

+0

运行脚本时,当前的工作目录是什么? (也就是说,如果你在调用'cp'之前调用'pwd',那么输出是什么? – chepner

+0

你是如何运行脚本的?我很惊讶你在第1行遇到有关'data/*'的zsh错误当这是一个'sh'脚本,其中第一行是注释 –

+0

@chepner当前目录是数据的父目录,就像我说过的,如果我在脚本的cp命令后面添加了'ls data',它会打印文件夹内容正确 – ruyuan

回答

1

我认为你正在寻找的命令可能是cp -r data /tmp/。它将在/tmp/中创建data目录。

+0

是的,我同意目标修复。但是这里的问题是该命令根本无法识别'data'文件夹。 – ruyuan

+0

'cp'实用程序的历史版本有'-r'选项。该实现支持该选项;然而,它的使用是强烈的不鼓励,因为它不正确地复制特殊文件,符号链接或fifo的。 –

+0

@ruyuan这可能是因为shell抱怨的“data”目录是/ tmp/data目录,因为它还不存在,或者您运行命令的工作目录不在同一个目录目录作为“数据”,您必须提供完整路径,或在复制之前先切换到目录。 – CodeWarrior

相关问题