有时我想要从另一个目录中复制两个或三个文件的目录中。
所以,让我们说我在一个空目录中,情况是这样的:
user@hisBox:~/really/deep/directory/structure
$ pwd
/home/user/really/deep/directory/structure
现在我想从一个看起来像这样的远程目录中复制两个文件(a.txt和b.txt):
user@hisBox:~/really/deep/directory/structure
$ ls /home/user/really/deep2/bla/foo/textfolder
a.txt b.txt c.txt d.txt e.txt
我想输入的内容是这样的:
user@hisBox:~/really/deep/directory/structure
$ cp ../../../deep2/bla/foo/textfolder/{a.txt, b.txt} .
应该导致这个
user@hisBox:~/really/deep/directory/structure
$ ls
a.txt b.txt
是否有可用的语法允许我在bash中执行此操作?
答案 0 :(得分:4)
是的(你已经在那里了):
cp ../../../deep2/bla/foo/textfolder/{a,b}.txt .
会将文件a.txt
和b.txt
复制到当前目录。这称为brace expansion。
正如gniourf_gniourf在评论中指出的那样,您也可以使用extended globbing来执行此操作:
shopt -s extglob
cp ../../../deep2/bla/foo/textfolder/@(a|b).txt .
@()
表示将复制与管道分隔选项之一匹配的任何文件。
这两个选项之间的区别在于第一个选项扩展为:
cp ../../../deep2/bla/foo/textfolder/a.txt ../../../deep2/bla/foo/textfolder/b.txt
这两个文件是否存在,而第二个只会扩展到它匹配的文件。再次感谢gniourf_gniourf的解释。