1

我正在尝试编写一个带有目录的脚本,将其所有文件复制到我创建的新目录中。所以脚本有两个参数。第一个是现有目录,第二个是创建的目录。

这是我到目前为止所拥有的:

dir1=$1
dir2=$2

mkdir $2
cp $1/. $2

然而我的新目录总是空的。是语法错误吗?

4

3 回答 3

1
cp -r $1/. $2

是否需要添加递归。

于 2012-10-11T17:30:25.210 回答
1

如果你告诉它 copy .,你实际上是在告诉它复制目录(.链接到它所在的目录,所以cd ././././././././在同一个目录上循环)。

你可以这样做:

cp $1/* $2

将所有文件从“$1”复制到“$2”,但不复制子目录

cp $1/. -r $2

递归复制所有文件和子目录,并将特殊文件视为常规文件(即,如果找到管道,则从管道读取并写入常规文件)。

cp $1/. -R $2

递归复制所有文件和子目录,并保留特殊文件

cp $1/. -a $2

复制所有内容,并保留链接、组权限和特殊文件。

希望这会有所帮助=)

于 2012-10-11T17:43:24.793 回答
0

cp $1/. $2我认为您需要使用通配符而不是点 cp $1/* $2

另一种方法是使用递归复制

cp -r $1/* $2 # copy the whole directory into the second one recursively (e.i. including subdirectories)
cp -ar $1/* $2 # this will keep the sym links intact (not trying to replace them with the file they point)
于 2012-10-11T17:38:45.730 回答