如何在bash脚本中将所有文件从一个目录复制到另一个目录

use*_*761 12 linux bash

我想将所有文件从子目录复制到另一个目录而不复制原始文件夹.在终端我会这样做:

cp -r dir1/* dir2
Run Code Online (Sandbox Code Playgroud)

然后dir2将包含dir1中的所有文件,而不包含dir1本身.我试图在一个bash脚本中复制它,我收到一个错误.这是我的bash代码:

cp -r $pck_dir"/*" $TAR_DIR"/pck/"
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

cp: cannot stat ‘./mailman/lists/mailman/*’: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我可以验证相关目录是否存在.我相信bash抱怨'*',但我不确定为什么.有人可以告诉我我做错了什么吗?

Joh*_*024 15

扩展devnull的评论:

  • 通配符周围的任何类型的引用*都会阻止shell扩展通配符.因此,"/*"如果你想要一个斜杠后跟一个文字星,你应该只写.

  • 不带引号的变量将受到分词的影响.因此,如果pck_dir具有该值my dir,则将$pck_dir"/*"扩展为两个单词my,dir/*并且这两个单词将cp作为单独的参数传递给它们.除非您想要分词,否则shell变量应始终使用双引号.

因此,要获得您想要的,请使用:

cp -r "$pck_dir"/* "$TAR_DIR/pck/"
Run Code Online (Sandbox Code Playgroud)