如何从给定目录中的文件名中删除前缀和后缀?

如何从给定目录中的文件名中删除前缀和后缀?

我有许多具有相同前缀和相同后缀的文件。我想从文件名中删除两者。两者都包含空格。

所以foo bar XXX doo par.jpg,foo bar YY YY doo par.jpg会变成XXX.jpgYY YY.jpg

答案1

带有名字:

设置:

$ mkdir test && cd test
$ > "foo bar XXX doo par.jpg"; > "foo bar YY YY doo par.jpg"

行动:

$ rename -n 's/^foo bar //; s/ doo par(\.[^.]*)$/$1/'  *
  foo bar XXX doo par.jpg renamed as XXX.jpg
  foo bar YY YY doo par.jpg renamed as YY YY.jpg

(删除-n以使这些动作实际执行)

答案2

如果文件名位于变量中,则删除前缀的规范方法是:

removepre="foo bar "
filename="foo bar XXX doo par.jpg"
filename="${filename#"$removepre"}"
echo "$filename"

您提供的后缀的问题是您想要保留一个扩展名,因此它变得有点长:

removesuf=" doo par"
filename="foo bar XXX doo par.jpg"
extension="${filename##*.}"            ### store extension in a variable.
filename="${filename%.*}"              ### remove extension.
filename="${filename%"$removesuf"}"    ### remove suffix.
filename="$filename.$extension"        ### re-place the extension
echo "$filename"

所有内容都加入到一个脚本中:

#!/bin/bash
filename="$1"

removepre="foo bar "
filename="${filename#"$removepre"}"

removesuf=" doo par"
extension="${filename##*.}"            ### store extension in a variable.
filename="${filename%.*}"              ### remove extension.
filename="${filename%"$removesuf"}"    ### remove suffix.
filename="$filename.$extension"        ### re-place the extension
echo "$filename"

调用脚本如下:

$ ./script "foo bar XXX doo par.jpg"
XXX.jpg"

了解引号对于处理带有空格的文件名是必须的。

相关内容