我有几个带有a.dat
, a.txt
, a.mp3
, b.dat
, b.txt
, b.mp3
, b.zip
,b.rar
等c.mp3
的文件。我想将所有具有基本名称“a”的文件重命名为基本名称“x”。
这样文件就变成x.dat
, x.txt
, x.mp3
, b.dat,
b.txt ,
b.mp3 ,
b.zip ,
b.rar ,
c.mp3` 等等。
在 Linux 中,这可以通过终端完成,但需要大量输入。我想要一个脚本来为我完成任务。
我有几个带有a.dat
, a.txt
, a.mp3
, b.dat
, b.txt
, b.mp3
, b.zip
,b.rar
等c.mp3
的文件。我想将所有具有基本名称“a”的文件重命名为基本名称“x”。
这样文件就变成x.dat
, x.txt
, x.mp3
, b.dat,
b.txt ,
b.mp3 ,
b.zip ,
b.rar ,
c.mp3` 等等。
在 Linux 中,这可以通过终端完成,但需要大量输入。我想要一个脚本来为我完成任务。
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
有一个小程序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 发行版一起提供。
我会建议一种方法,我认为这可行。我觉得这有点奇怪,不要笑。第十标准数学。
首先,您使用 ls 和 grep 命令的组合 grep 文件夹中的所有名称
ls | grep ^a 这将列出所有以 a 作为第一个字母的文件。如果您只需要以 a 作为名称的文件,则可以使用正则表达式。
使用 while 循环一一读取文件名
将文件名存储到一个变量中(比如 $name1)。然后使用 sed 和 awk,提取文件名的第二部分(即,将点删除到空格中并打印第二列)将其存储在另一个变量中(比如 $extn) .
您可以使用存储在变量 ($name1) 中的第一个名称重命名文件以指定哪个文件,并使用第二个变量指定新名称的扩展名 ($extn)...
这是一条很长的路线:) 我相信这会奏效。试试看。将此视为算法和脚本。很抱歉我提供了一个脚本。有点懒惰。