我有许多具有相同前缀和相同后缀的文件。我想从文件名中删除两者。两者都包含空格。
所以foo bar XXX doo par.jpg
,foo bar YY YY doo par.jpg
会变成XXX.jpg
和YY 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"
了解引号对于处理带有空格的文件名是必须的。