【问题标题】:Script to change basename with without changing extension in linux脚本在不更改linux中的扩展名的情况下更改basename
【发布时间】:2012-08-08 01:31:25
【问题描述】:

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

这样文件变成x.dat,x.txt,x.mp3,b.dat,b.txt,b.mp3,b.zip,b.rar,c.mp3`等等。

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

【问题讨论】:

    标签: linux bash shell file-rename


    【解决方案1】:

    当您有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
    

    【讨论】:

      【解决方案2】:

      有一个名为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 发行版一起提供。

      【讨论】:

      • 这是一个不错的选择,非常感谢。否则我会死在下面的脚本中;):P。
      【解决方案3】:

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

      首先你使用 ls 和 grep 命令的组合 grep 文件夹中的所有名称

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

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-09-18
        • 2011-05-26
        • 1970-01-01
        • 2018-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多