终端:避免多次重复目录以访问其中的文件

终端:避免多次重复目录以访问其中的文件

我在一个目录中file1.txt有两个文件。我想将这些文件复制到远离该目录的当前工作目录中。flie2.txtXX

所以我最终得到了如下命令:

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.txtfile2.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 的文件

相关内容