如何使用正则表达式递归重命名文件

如何使用正则表达式递归重命名文件

我的硬盘上有数百个文件,其中有许多目录和子目录,其开头为:

1.1、、、、、、、、、、等等等等...1.21.3​​​2.13.19.110.110.2

问题是,当我列出它们时,它们看起来像这样: 10.110.21.11.2等等。

零出现在句点之前,因此我需要通过将两个数字之间的句点替换为连字符来重命名以这种方式开头的所有文件,以便列出它们: 1-12-19-110-111-1

我曾经给我的音乐和视频文件名命名01-01.ext,,,, 这非常有效,当我用句点命名数百个文件时,我度过了一个高级时刻:01-02.ext|01-10.ext02-01.ext

我试图找到这个问题的答案,但它们要么不是我需要的,要么太让我难以理解......

我正在使用 Linux Mint 20.3 Una。我尝试在终端中进入我的硬盘驱动器的根目录(带有一些虚拟文件的测试!!)并尝试各种组合,例如:
's,^[0-9]\.[0-9]*',[0-9]\-[0-9]*.*但这都是反复试验的东西(而且它肯定会出错!)我不知道知道任何地方足以让我自己解决这个问题。

我确信这个问题会在某个地方得到解答,但我只是找不到在哪里!

第一次,谢谢你的提示。

如果我在 Linux PC 以外的设备上观看 DVD 节目,它们可能会按顺序列出,但也可能不会。因此,理想情况下,我想更改硬盘驱动器上所有位置的文件名。这是此类的典型列表...

-rwxrwxrwx 1 root root 222647532 Jun  4  2010 5.9 Mr Chairman.mp4
-rwxrwxrwx 1 root root 229849021 Jun  5  2010 6.10 Well Well Well.mp4
-rwxrwxrwx 1 root root 236174416 Jun  5  2010 6.11 The Phantom Pools Winner.mp4
-rwxrwxrwx 1 root root 242440279 Jun  5  2010 6.12 A Matter Of Principle.mp4
-rwxrwxrwx 1 root root 229969047 Jun  5  2010 6.13 Some Enchanted Evening.mp4
-rwxrwxrwx 1 root root 244241841 Jun  4  2010 6.1 The Frozen Limit.mp4
-rwxrwxrwx 1 root root 239823201 Jun  4  2010 6.2 Beautiful Dreamer.mp4
-rwxrwxrwx 1 root root 231566965 Jun  4  2010 6.3 Fish With Everything.mp4  

像这样的东西可能就是我正在寻找的。

rename -n 's/\./-/' * 

但我必须获取数字之间的句点,因为文件名本身将包含句点(如果只有扩展名),即:02.01.05 Mr. Baz.mp4.

我最初的问题就像泥巴一样清晰......希望这更清楚一点。

答案1

并不是真正回答问题的操作方法,而是超越这个问题的原因,在带有 GNU 的系统上,ls您可以用来ls -v按“自然”顺序列出文件。以下是文档 ( man ls) 的内容:

-v文本中(版本)数字的自然排序

这是例子,

mkdir /tmp/737361
cd /tmp/737361
touch 1.1 1.2 1.3 2.1 3.1 9.1 10.1 10.2

第一的,

ls
1.1  1.2  1.3  10.1  10.2  2.1  3.1  9.1

但,

ls -v
1.1  1.2  1.3  2.1  3.1  9.1  10.1  10.2

相关内容