BASH中是否有一种移动匹配文件的方法;regexed通配符“;?

BASH中是否有一种移动匹配文件的方法;regexed通配符“;?,regex,bash,shell,Regex,Bash,Shell,假设我有以下内容: drwxr-xr-x 2 jirislav jirislav 4096 srp 17 20:31 Forrest Gump -rw-r--r-- 1 jirislav jirislav 491866996 srp 18 19:57 Forrest -rw-r--r-- 1 jirislav jirislav 216513381 srp 18 20:00 Forrest2 -rw-r--r-- 1 jirislav jirislav 26131

假设我有以下内容:

drwxr-xr-x  2 jirislav jirislav       4096 srp 17 20:31 Forrest Gump
-rw-r--r--  1 jirislav jirislav  491866996 srp 18 19:57 Forrest
-rw-r--r--  1 jirislav jirislav  216513381 srp 18 20:00 Forrest2
-rw-r--r--  1 jirislav jirislav      26131 srp 18 20:01 Forrest-min
-rw-r--r--  1 jirislav jirislav     215131 srp 18 20:01 mess-1
-rw-r--r--  1 jirislav jirislav    6211341 srp 18 20:03 bigger-mess
-rw-r--r--  1 jirislav jirislav   37225110 srp 18 20:05 largest-mess
我想将Forrest、Forrest2和Forrest-min移动到Forrest-Gump目录中,而不指定多个输入路径,并且我想不使用find命令

我的意思是-有没有办法移动(使用mv cmd)与此正则表达式匹配的所有内容

mv Forrest[^\ ]* Forrest\ Gump
我知道我不能像这样在bash中用mv编写这个正则表达式,但是已经有了对通配符的支持,所以我想在使用星号时可以指定我不想匹配的内容

来自@anubhava的解决方案
使用
extglob
可以执行以下操作:

shopt -s extglob

mv Forrest*([! ]) Forrest\ Gump
shopt -s extglob

mv Forrest*([! ]) Forrest\ Gump
extglob
模式中
*([!])
将匹配除空格以外的任何内容

编辑
请注意,在Debian中,jessie默认启用extglob,因此您不必记得启用shell选项。

您可以使用大括号扩展(我假设您的反对意见是必须多次键入
Forrest
):


不是正则表达式,但它是一种(某种)模式。从:


您似乎需要启用
extglob
shell选项才能使其工作:
shopt-s extglob
(谢谢)。似乎我在OS X上的bash via版本默认启用了此功能。

使用
extglob
可以执行以下操作:

shopt -s extglob

mv Forrest*([! ]) Forrest\ Gump
shopt -s extglob

mv Forrest*([! ]) Forrest\ Gump

extglob
模式中
*([!])
将匹配除空格以外的任何内容。

我从未见过这种语法。有趣。@BrianVandenberg,这是一个extglob。未启用开箱即用功能,但这是一项可用功能。@Harvey,您至少应该记录启用extglobs。我不记得启用过它们。正则表达式和(扩展)模式都是使用确定性有限自动机匹配字符串的两种不同语法。它们执行大致相同的任务,但说扩展模式是正则表达式在技术上是不正确的。使用coreutils中的mv:
mv Forrest*“Forrest Gump”
并忽略错误。
mv$(ls | egrep_模式)destination
但在将输出传递给make之前它不会引用它。@Cyrus尼斯变通方法:)-我没有想到这一点,但anubhava已经向我展示了我想知道的内容-如何在所有可能的bash中使用正则表达式commands@Harvey,您的解决方案正在创建另一个正在工作的shell环境,但如果你想利用的自动完成,那你就太傻了这正是我想要的!!:)谢谢