我在一个目录中file1.txt
有两个文件。我想将这些文件复制到远离该目录的当前工作目录中。flie2.txt
X
X
所以我最终得到了如下命令:
cp ~/Desktop/dir/dir/dir/dir/file1.txt ~/Desktop/dir/dir/dir/dir/file2.txt .
有没有办法一次性使用两个文件的目录路径,某种快捷方式?
我确定有,Ubuntu 从来没有辜负我的懒惰 :D
答案1
用于[1-2]
指示文件,这使用了bash
的范围扩展功能:
cp ~/Desktop/dir/dir/dir/dir/file[1-2].txt .
这里范围[1-2]
将扩大,因此file[1-2].txt
将扩大到file1.txt
和file2.txt
。
请注意,如果您有多个这样的文件,并且其名称中包含不同数量的数字:
file1.txt file12.txt file980.txt file0.txt file23.txt
在这种情况下,使用extglob
的功能bash
来启用扩展模式匹配:
$ shopt -s extglob
$ cp ~/Desktop/dir/dir/dir/dir/file+([0-9]).txt .
extglob 模式+([0-9])
将匹配文件名中的file
和之间的一个或多个数字。.txt
还要注意,它不依赖于任何前缀或后缀,例如如果您有以下名称的文件:
1 02 043 908
这些也可以通过以下方式匹配(和复制):
$ cp ~/Desktop/dir/dir/dir/dir/+([0-9]) .
检查一下man bash
以获取更多关于此的想法。
答案2
我会用括号扩展对于这种事情
cp -t ./ ~/Desktop/dir/dir/dir/dir/file{1..5}.txt
cp -t ./ ~/Desktop/dir/dir/dir/dir/{xx.x,yy.y}
答案3
我在用着历史扩展和字标识符很多。!$
将指定前一个命令的最后一个参数。
大多数情况下,我会先查看该文件夹,ls
然后再处理。
$ ls ~/Desktop/dir/dir/dir/dir
file1.txt file2.txt
$ cp !$/file1.txt !$/file2.txt .
cp ~/Desktop/dir/dir/dir/dir/file1.txt ~/Desktop/dir/dir/dir/dir/file2.txt .
如您所见,bash 自动!$
用前面的命令的最后一个参数替换。
您甚至可以使用该参数的各个部分。!$:h
(h 代表 head)将指定最后一个参数的目录名。!$:t
(t 代表 tail)将指定最后一个参数的基本名称。
因此,如果你之前已经阅读过该文件,那么less
你可以这样做
$ less ~/Desktop/dir/dir/dir/dir/file1.txt
$ cp !$ !$:h/file2.txt .
cp ~/Desktop/dir/dir/dir/dir/file1.txt ~/Desktop/dir/dir/dir/dir/file2.txt .
答案4
所提出的问题也可以使用以下命令解决。
cp ~/Desktop/dir/dir/dir/dir/file*.txt .
它将复制任何具有命名样式 file(something in between).txt 的文件