【发布时间】:2019-09-21 04:03:40
【问题描述】:
Bash 无法识别此 mv 命令中的正则表达式:
mv ../downloads'^[exam].*$[.pdf] ../physics2400/exams
我正在尝试将文件从下载目录移动到我为它们创建的目录中。
这种文件的一个例子是'Exam 2 Practice Homework (Solutions).pdf'
(单引号显然是 Bash 文件的一部分。
下载文件夹中有许多其他文件,因此无论如何都是正则表达式或尝试。
【问题讨论】:
-
shell 不使用正则表达式来匹配文件名,它使用通配符(或“glob”)表达式。而且您的正则表达式没有意义,所以我不确定 glob 等价物是什么。
-
该正则表达式不会匹配任何内容,因为
$之后有文本。就像@GordonDavisson 所说,这没有任何意义。就mv exam.*pdf(这是我根据你写的最接近的猜测)。 -
另一个注意事项:当像这样进行批量移动时,总是使用
mv -i或mv -n以防止mv在出现名称冲突时静默且不可逆地删除文件.还有……你有备份吗?对于您不想丢失的任何内容,您应该始终拥有至少一份备份。 -
@-Gordon Davisson - move 命令的 -n 选项有什么作用。我很难查找它。它不在手册页上,也没有在谷歌搜索中显示。我确实找到了交互式提示的 -i 选项。
-
@teaNcode
-n告诉mv根本不要覆盖现有文件;这就像使用mv -i,然后在每次询问是否应该覆盖某些内容时输入“n”。您可能有一个没有此选项的mv版本(您使用的是什么操作系统和版本?)。这是Linux man page formv,其中列出了-n。