我有连续数字作为后缀的文件的列表。 我只想复制这些文件的范围。 我如何指定一个范围作为我的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