如何使用cp命令从不同目录复制多个文件?

52

我希望在进入另一个目录后,能够一次性从特定目录复制多个文件。为了澄清我的意思,我想一次完成以下操作(一个命令):

cp ../dir5/dir4/dir3/dir2/file1 .
cp ../dir5/dir4/dir3/dir2/file2 .
cp ../dir5/dir4/dir3/dir2/file3 .
cp ../dir5/dir4/dir3/dir2/file4 .

由于在dir2中有n个文件(n>4),所以我无法使用cp ../dir5/dir4/dir3/dir2/* .命令。

顺便说一下,我正在使用bash

谢谢。


1
cp -t 目录 源是一个选项,可以用来将所有/选定的文件从一个目录复制到另一个目录。 - Xander
3个回答

84
cp ../dir5/dir4/dir3/dir2/file[1234] .

或(在Bash中)

cp ../dir5/dir4/dir3/dir2/file{1..4} .

如果文件名不连续,你可以使用

cp ../dir5/dir4/dir3/dir2/{march,april,may} .

实际情况下,文件名是完全不同的。 cp ../dir5/dir4/dir3/dir2/[march april may] . 将无法工作。谢谢。 - ziulfer
2
为什么不告诉我们真实的案例呢? - Philipp
1
@ziulfer:好的,使用花括号语法也是可行的。 - Philipp
再次感谢您。这个大括号语法对我非常有用。然而,我真正想念的是默认的逐个文件复制命令“cp”中的自动补全功能。使用大括号语法是否有可能实现这一点? - ziulfer
如果有人遇到这个问题,重要的是在 {alpha.a,beta.b,gamma.g,delta.d} 这种类型的列表中,逗号和文件名之间没有空格。 - Piotr

5

如果你想复制的所有文件都符合 file{number}{othertext} 的模式,那么你可以使用类似于以下的命令:

cp ../dir5/dir4/dir3/dir2/file[0-9]* .

请注意,这将复制file5,但也会复制file0abc
如果您只想复制这四个文件(而不是{othertext}的那些文件),可以使用以下命令:
cp ../dir5/dir4/dir3/dir2/file[1-4] .

请注意,尽管这看起来像正则表达式的一部分,但它实际上并不是。

谢谢。实际情况是文件名完全不同。cp ../dir5/dir4/dir3/dir2/[march april may] .无法工作。 - ziulfer
但那不是你的问题。 - ghoti
还想提一下,cp ../dir5/dir4/dir3/dir2/F* . 是可行的。这适用于文件名只有起始字母相同的情况。只有以 F 开头的文件需要被复制。 - smac89

3
尝试这个:

试一试:

 cp ../dir5/dir4/dir3/dir2/file{1..4}

1
仅适用于bash。OP没有指定他正在使用哪个shell。 - Graham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接