错误重命名命令后的文件位置

Ser*_*rge 7 regular-expression rename

新手在这里...只是尝试使用将名称中包含 2 个点的文件名更改为单个点

rename 's/.././' filename
Run Code Online (Sandbox Code Playgroud)

该文件已消失,但我不认为它已被删除,因为内存中仍有相同数量的空间。这个文件会被发送到哪里?

pLu*_*umo 20

.lename现在调用该文件。

(这是假设filename之前调用过该文件,我猜您的“真实”文件将具有不同的名称。但是无论文件如何调用,前两个字符已被替换为.。)

这是因为正则表达式中的点是一个特殊字符,意思是匹配任何字符。所以,..是任意两个字符。作为rename唯一的,除非你添加替换第一场比赛全球修饰符(g),您给的文件名的前两个字符已被替换。

请注意,in 中的“替换”s/regex/replacement/modifiers不是正则表达式,因此表达式.右侧的s/.././可以按预期工作。


现在,您的文件在哪里:

以 a 开头的.文件是隐藏文件。因此,您不会通过运行看到它们ls。运行ls -a以显示这些文件。

使用重命名您的文件 mv .lename filename


下一次,转义正则表达式特有的字符:

rename 's/\.\././' filename
Run Code Online (Sandbox Code Playgroud)

此外,您可以rename -n ...在执行实际重命名之前进行试运行并检查结果。那会向你展示这样的东西:

rename(filename, .lename)
Run Code Online (Sandbox Code Playgroud)

  • 此外,您可能已经使用正则表达式开始了 XY 问题。您可以使用 `mv` 命令重命名文件。此命令对以点开头的文件名没有问题。添加两个破折号甚至可以让以破折号开头的文件名问题消失:`mv -- -oldfilename newfilename`(如果文件之前被命名为`-oldfilename`)。这看起来比正则表达式简单得多。 (2认同)