我想将多个文件从一个目录复制到另一个目录。我有一个包含以下结构的变量(文件):
file1 file2
File1 和 file2 位于 dir1 中,我想使用以下似乎不起作用的代码将它们复制到 dir2 中:
cp ./dir1/$files ./dir2
答案1
有几种方法。最简单的就是切换到第一个目录
cd dir1 ; cp $files ../dir2
一个问题是,名称由空格分隔的字符串并不是操作名称的最佳形式,特别是当名称包含空格时。你拥有的就是你拥有的,但我们希望你有 bash、zsh、ksh 或类似的带有数组的东西。将字符串更改为数组:
names=( $files )
然后,您可以应用转换,例如将“dir1/”添加到名称数组的每个元素上。
cp "${names[@]/#/dir1/}" dir2
这不是最明显的语法,所以让我稍微分解一下。
- 第一个
/
引入了替换操作。 - 匹配
#
元素的开头,类似于^
正则表达式。 - 第二个
/
结束替换的“from”部分。 - 是
dir1/
替换的“to”部分,第三个没有什么特别的,/
它只是“to”部分中的一个字符。 - 这
[@]
使得它适用于数组中的所有元素。使用[@]
内部双引号可以阻止分词。 - 需要使用
{
和来将和 替换操作与变量名}
组合在一起。[@]
- 这
$
只是普通的变量引用。