重命名多个文件,但只重命名Bash中的部分文件名

时间:2013-12-18 11:51:52

标签: bash file-rename

我知道如何重命名文件等,但我遇到了麻烦。

我只需要在for循环中重命名test-this

test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext 
test-this.volume003+08.ext 
test-this.volume004+16.ext 
test-this.volume005+32.ext 
test-this.volume006+64.ext 
test-this.volume007+78.ext 

3 个答案:

答案 0 :(得分:92)

如果您将所有这些文件放在一个文件夹中并且您使用的是Linux,则可以使用:

rename 's/test-this/REPLACESTRING/g' *

结果将是:

REPLACESTRING.ext
REPLACESTRING.volume001+02.ext
REPLACESTRING.volume002+04.ext
...

rename可以将命令作为第一个参数。这里的命令由四部分组成:

  1. s:用另一个字符串替换字符串的标志
  2. test-this:您要替换的字符串
  3. REPLACESTRING:要用,和
  4. 替换搜索字符串的字符串
  5. g:一个标志,指示应替换搜索字符串的所有匹配项,即如果文件名为test-this-abc-test-this.ext,结果将为REPLACESTRING-abc-REPLACESTRING.ext
  6. 有关标志的详细说明,请参阅man sed

答案 1 :(得分:41)

使用rename,如下所示:

rename test-this foo test-this*

这会将test-this替换为文件名中的foo

如果您没有rename使用for循环,如下所示:

for i in test-this*
do
    mv "$i" "${i/test-this/foo}"
done

答案 2 :(得分:9)

功能

我在OSX上,而我的bash没有rename作为内置函数。我在我的.bash_profile中创建了一个函数,该函数接受第一个参数,该参数是文件中只应匹配一次的模式,并不关心它后面的内容,并替换为参数2的文本。 / p>

rename() {
    for i in $1*
    do
        mv "$i" "${i/$1/$2}"
    done
}

输入文件

test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext 
test-this.volume003+08.ext 
test-this.volume004+16.ext 
test-this.volume005+32.ext 
test-this.volume006+64.ext 
test-this.volume007+78.ext 

命令

rename test-this hello-there

输出

hello-there.ext
hello-there.volume001+02.ext
hello-there.volume002+04.ext 
hello-there.volume003+08.ext 
hello-there.volume004+16.ext 
hello-there.volume005+32.ext 
hello-there.volume006+64.ext 
hello-there.volume007+78.ext