我可以使用shell通配符来选择跨两位数字的文件名(例如,从foo_1.jpg到foo_54.jpg)吗?

DQd*_*dlM 27 bash shell wildcard

我有一个图像文件的目录foo_0.jpgfoo_99.jpg.我想foo_0.jpg通过复制文件foo_54.jpg.

这可能只是使用bash通配符吗?

我想是这样cp foo_[0-54].jpg,但我知道这个选择0-54(右?)

此外,如果只有通配符不可能(或有效),那么更好的方法是什么?

谢谢.

gle*_*man 50

我假设您要将这些文件复制到另一个目录:

cp -t target_directory foo_{0..54}.jpg
Run Code Online (Sandbox Code Playgroud)


Dav*_* W. 9

我喜欢glenn jackman的回答,但是如果你真的想使用globbing,以下内容也可能适合你:

$ shopt -s extglob
$ cp foo_+([0-9]).jpg $targetDir
Run Code Online (Sandbox Code Playgroud)

在扩展的globbing +()匹配中,括号中的任何表达式的一个或多个实例.

现在,这将复制所有名称foo_后跟任何数字的文件,然后是.jpg.这将包括foo_55.jpg,foo_139.jpg,和foo_1223218213123981237987.jpg.

再想一想,格伦杰克曼有更好的答案.但是,它确实让我有机会谈论扩展的全球化.