我想将所有文件从子目录复制到另一个目录而不复制原始文件夹.在终端我会这样做:
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)