在不更改linux扩展名的情况下更改基本名称的脚本

时间:2012-04-13 09:26:10

标签: linux bash shell file-rename

我有多个文件包含a.data.txta.mp3b.datb.txtb.mp3b.zipb.rarc.mp3等等。我想将基本名称为“a”的所有文件重命名为basename“x”。

此类文件变为x.datx.txtx.mp3b.dat, b.txt , b.mp3 , b.zip { {1}} b.rar , c.mp3`等等。

在Linux中,这可以通过终端完成,但需要大量输入。我想要一个脚本为我完成任务。

3 个答案:

答案 0 :(得分:4)

当您拥有rename(或某些系统上的prename)命令时,您不需要脚本。

它允许使用任意复杂的Perl正则表达式重命名文件组:

pax> ll qq*
-rwxr-xr-x 1 pax pax 4574 Apr 13 17:03 qq
-rw-r--r-- 1 pax pax  213 Apr 13 17:03 qq.c
-rw-r--r-- 1 pax pax  804 Apr  6 12:23 qq.cpp
-rw-r--r-- 1 pax pax  258 Apr  5 21:33 qq.m
-rw-r--r-- 1 pax pax  904 Apr  6 10:35 qq.o
-rw-r--r-- 1 pax pax  241 Apr  6 10:50 qq.py
-rw-r--r-- 1 pax pax  769 Apr  7 09:47 qq.txt

pax> rename 's/qq/xyzzy/' qq*

pax> ll qq*
ls: cannot access qq*: No such file or directory

pax> ll xyzzy*
-rwxr-xr-x 1 pax pax 4574 Apr 13 17:03 xyzzy
-rw-r--r-- 1 pax pax  213 Apr 13 17:03 xyzzy.c
-rw-r--r-- 1 pax pax  804 Apr  6 12:23 xyzzy.cpp
-rw-r--r-- 1 pax pax  258 Apr  5 21:33 xyzzy.m
-rw-r--r-- 1 pax pax  904 Apr  6 10:35 xyzzy.o
-rw-r--r-- 1 pax pax  241 Apr  6 10:50 xyzzy.py
-rw-r--r-- 1 pax pax  769 Apr  7 09:47 xyzzy.txt

答案 1 :(得分:1)

有一个名为mmv的小程序可以完成这项任务:

$ touch a.dat a.txt a.mp3 b.dat b.txt b.mp3 b.zip b.rar c.mp3
$ mmv "a.*" "x.#1"
$ ls 
b.dat  b.mp3  b.rar  b.txt  b.zip  c.mp3  x.dat  x.mp3  x.txt

mmv通常附带任何Linux发行版。

答案 2 :(得分:0)

我会建议一种方法,我认为这可行。我觉得这有点奇怪,不要笑。第10节数学。

首先,使用ls和grep命令

的组合来grep文件夹中的所有名称
  • ls | grep ^ a这将列出所有带有a作为第一个字母的文件。如果只需要带有名称的文件,则可以使用正则表达式。

  • 使用while循环逐个读取文件名

  • 将文件名存储到变量(比如$ name1)。并使用sed和awk,提取文件名的第二部分(即将点移到空格中并打印第二个颜色)将其存储在另一个中变量(比如$ extn)。

  • 您可以使用存储在变量($ name1)中的第一个名称重命名文件,以指定哪个文件,并使用第二个变量为新名称指定扩展名($ extn)...

这是一条loooong路线:)我相信这会有效。试试吧。将此视为算法和脚本。很抱歉我提供了一个脚本。有点懒。