我想将所有文件从子目录复制到另一个目录而不复制原始文件夹。在终端我会这样做:
cp -r dir1/* dir2
然后dir2将包含dir1中的所有文件而不包含dir1本身。我试图在一个bash脚本中复制它,我收到一个错误。这是我的bash代码:
cp -r $pck_dir"/*" $TAR_DIR"/pck/"
我收到此错误:
cp: cannot stat ‘./mailman/lists/mailman/*’: No such file or directory
这很奇怪,因为我可以验证相关目录是否存在。我相信bash抱怨'*',但我不确定为什么。有人可以告诉我我做错了什么吗?
答案 0 :(得分:14)
扩展devnull的评论:
通配符周围的任何类型的引用,如*
,都会阻止shell扩展通配符。因此,如果你想要一个斜杠后跟一个文字星,你应该只写"/*"
。
不带引号的变量将受到分词的影响。因此,如果pck_dir的值为my dir
,那么$pck_dir"/*"
将扩展为两个单词my
和dir/*
,这两个单词将作为单独的单词传递给cp
参数。除非你想要分词,否则shell变量应该总是用双引号。
因此,为了得到你想要的东西,请使用:
cp -r "$pck_dir"/* "$TAR_DIR/pck/"
答案 1 :(得分:2)
请改用rsync命令行。
rsync -auv dir1 / dir2 /
将递归地将文件夹dir1中的所有文件同步到文件夹dir2。
man rsync
获取更多解释,了解如何使用此命令行。