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


13

我有一个带有连续数字后缀的文件列表。我只想复制这些文件的一部分。如何在我的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/.

有没有办法做到这一点?

Answers:



9

要遍历bash范围:

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

适用于您的情况:

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

确实可以,但是我更喜欢@glenn jackman的答案,因为它不调用任何编程构造。
Amjith 2012年

4

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

setopt extendedglob
echo P10802<75-83>.JPG

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

另一方面,{x ... y}字符串扩展运算符(由zsh以及最新版本的bash和ksh93支持),将字符串扩展为从x到y的字符串,而不管当前目录中有什么文件。

cp P10802<75-83>.JPG ~there

将复制匹配的文件,因此

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

但是,例如如果P1080281.JPG不存在,则会出现错误。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.