在命令行中复制一系列文件(ZSH / BASH)

我有连续数字作为后缀的文件的列表。 我只想复制这些文件的范围。 我如何指定一个范围作为我的cp命令的一部分。

$ls P1080272.JPG* P1080273.JPG* P1080274.JPG* P1080275.JPG* P1080276.JPG* P1080277.JPG* P1080278.JPG* P1080279.JPG* P1080280.JPG* P1080281.JPG* P1080282.JPG* P1080283.JPG* 

我想从P1080275.JPG复制文件到P1080283.JPG类似于:

 $cp P10802[75-83].JPG ~/Images/. 

有没有办法做到这一点?

很接近:

 cp P10802{75..83}.JPG ~/Images 

在bash中遍历一个范围:

 for x in {0..10}; do echo $x; done 

在你的情况下应用相同的:

 for x in {272..283}; do cp P1080$x.JPG ~/Images; done 

带有extendedglob选项的Zsh具有globbing (模式匹配)运算符。

 setopt extendedglob echo P10802<75-83>.JPG 

将匹配当前目录中匹配该模式的文件名(注意P1080275.JPG匹配,但P108020000000075.JPG也匹配)

另一方面,{x … y}string扩展运算符(由zsh和最新版本的bash和ksh93支持)扩展为x到y的string,而不pipe当前目录中有哪些文件。

 cp P10802<75-83>.JPG ~there 

会复制匹配的文件,所以会

 cp P10802{75..83}.JPG ~there 

但是如果例如P1080281.JPG不存在,你会得到错误。

这会为你工作:

 for each in {75..83}; do cp P10802$each.JPG ~/Images/; done