我知道如何重命名文件等,但我遇到了麻烦.
我只需要test-this在for循环中重命名.
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
Run Code Online (Sandbox Code Playgroud)
Tim*_*ann 108
如果您将所有这些文件放在一个文件夹中并且在Linux上,则可以使用:
rename 's/test-this/REPLACESTRING/g' *
Run Code Online (Sandbox Code Playgroud)
结果将是:
REPLACESTRING.ext
REPLACESTRING.volume001+02.ext
REPLACESTRING.volume002+04.ext
...
Run Code Online (Sandbox Code Playgroud)
rename可以将命令作为第一个参数.这里的命令由四部分组成:
s:用另一个字符串替换字符串的标志,test-this:要替换的字符串,REPLACESTRING:要用,和替换搜索字符串的字符串g:一个标志,指示应替换搜索字符串的所有匹配项,即如果文件名是test-this-abc-test-this.ext结果将是REPLACESTRING-abc-REPLACESTRING.ext.man sed有关标志的详细说明,请参阅.
dog*_*ane 46
使用rename如下所示:
rename test-this foo test-this*
Run Code Online (Sandbox Code Playgroud)
这将替换test-this与foo在文件名.
如果您没有rename使用for如下所示的循环:
for i in test-this*
do
mv "$i" "${i/test-this/foo}"
done
Run Code Online (Sandbox Code Playgroud)
use*_*526 15
不使用rename:
find -name test-this\*.ext | sed 'p;s/test-this/replace-that/' | xargs -d '\n' -n 2 mv
Run Code Online (Sandbox Code Playgroud)
其工作方式如下:
find将会找到所有符合您条件的文件。如果您传递-name一个 glob 表达式,请不要忘记转义*.
将换行符分隔的*文件名列表通过管道传输到sed,这将:
A。打印 ( p) 一行。
b. 将 ( s///)替换test-this为replace-that并打印结果。
C。转到下一行。
将新旧文件名交替的换行符分隔列表通过管道传输到xargs,这将:
A。将换行符视为分隔符 ( -d '\n')。
b. 每次mv最多使用 2 ( ) 个参数重复调用。-n 2
对于试运行,请尝试以下操作:
find -name test-this\*.ext | sed 'p;s/test-this/replace-that/' | xargs -d '\n' -n 2 echo mv
Run Code Online (Sandbox Code Playgroud)
*:请记住,如果您的文件名包含换行符,它将不起作用。
Joe*_*ack 10
我在OSX上,而我的bash不是rename作为内置函数提供的.我在my .bash_profile中创建了一个函数,它接受第一个参数,该参数是文件中只应匹配一次的模式,并不关心它后面的内容,并替换为参数2的文本.
rename() {
for i in $1*
do
mv "$i" "${i/$1/$2}"
done
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)