我知道如何重命名文件等,但我在这方面遇到了麻烦。
我只需要在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
如果您将所有这些文件都放在一个文件夹中并且您使用的是 Linux,则可以使用:
rename 's/test-this/REPLACESTRING/g' *
结果将是:
REPLACESTRING.ext
REPLACESTRING.volume001+02.ext
REPLACESTRING.volume002+04.ext
...
rename
可以将命令作为第一个参数。这里的命令由四部分组成:
s
:用另一个字符串替换一个字符串的标志,test-this
:要替换的字符串,REPLACESTRING
:要替换搜索字符串的字符串,以及g
:一个标志,指示搜索字符串的所有匹配项都将被替换,即如果文件名是test-this-abc-test-this.ext
,则结果将是REPLACESTRING-abc-REPLACESTRING.ext
。请参阅
man sed
了解标志的详细说明。
使用
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
我使用的是 OSX,我的 bash 没有
rename
作为内置函数。我在我的 .bash_profile
中创建了一个函数,它接受第一个参数,这是文件中只应该匹配一次的模式,并且不关心它后面的内容,并替换为参数 2 的文本。
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
不使用
rename
:
find -name test-this\*.ext | sed 'p;s/test-this/replace-that/' | xargs -d '\n' -n 2 mv
其工作原理如下:
find
将会找到符合您条件的所有文件。如果您传递 -name
一个全局表达式,请不要忘记转义 *
。
将换行符分隔的*文件名列表通过管道传输到
sed
,这将:
a.打印 (
p
) 一行。
b.将 (
s///
) test-this
替换为 replace-that
并打印结果。
c.转到下一行。
将新旧文件名交替的换行符分隔列表通过管道传输到
xargs
,这将:
a.将换行符视为分隔符 (
-d '\n'
)。
b.每次最多使用 2 (
mv
) 个参数重复调用 -n 2
。
要进行空运行,请尝试以下操作:
find -name test-this\*.ext | sed 'p;s/test-this/replace-that/' | xargs -d '\n' -n 2 echo mv
*:请记住,如果您的文件名包含换行符,它将不起作用。
将index.htm重命名为index.html
rename [what you want to rename] [what you want it to be] [match on these files]
rename .htm .HTML *.htm
将index.htm重命名为index.html 它将对文件夹中与 *.htm 匹配的所有文件执行此操作。
如果您不太理解
xargs
,无法轻松执行此操作,请尝试以下操作:
for i in your_files_*
do
mv $i ${i/your_files_/new_prefix_}
# Use `echo ${i/your_files_/new_prefix_}` here first to confirm you got the pattern right
done
感谢您的热情和回答。我还找到了一个解决方案,可以在我的Linux终端上重命名多个文件并直接添加一个小计数器。这样我就有很好的机会获得更好的 SEO 名称。
这是命令
count=1 ; zmv '(*).jpg' 'new-seo-name--$((count++)).jpg'
我还制作了一个实时编码视频并将其发布到YouTube