Bash在此mv
命令中无法识别正则表达式:
mv ../downloads'^[exam].*$[.pdf] ../physics2400/exams
我正在尝试将文件从下载目录移动到我创建的目录中。
此类文件的一个示例是'Exam 2 Practice Homework (Solutions).pdf'
(单引号显然是Bash中文件的一部分。
下载文件夹中还有许多其他文件,因此无论是正则表达式还是尝试。
答案 0 :(得分:1)
执行文件名扩展时, Bash不使用正则表达式。取而代之的是,使用一种称为“ globbing”的模式匹配。 Filename Expansion section of the Bash manual中对此进行了讨论。
关于示例文件名(Exam 2 Practice Homework (Solutions).pdf
),需要注意以下几点:
Exam\ 2\ Practice\ Homework\ \(Solutions\).pdf
。有关更多详细信息,请参见Quoting section of the Bash manual。E
开头的情况这是一个模式匹配表达式,它将匹配您的示例文件名以及其他以Exam
开始并以.pdf
结尾的文件。
mv ../downloads/Exam*.pdf ../phyiscs2400/exams
如果您有同时以Exam
和exam
开头的文件,则可以使用以下两种方法进行解释:
mv ../downloads/[Ee]xam*.pdf ../phyiscs2400/exams
括起来的表达式被解释为“与任何包含的字符匹配” 。这样您就可以同时考虑大写和小写。
在执行此类mv
命令之前,我将通过运行ls
来验证目标文件是否匹配来测试文件名扩展:
ls ../downloads/[Ee]xam*.pdf
答案 1 :(得分:0)
如果要使用正则表达式,该怎么办?
find ./downloads -regex '.*\.pdf' -exec mv '{}' exams/ \;