Files

如何從給定目錄中的文件名中刪除前綴和後綴?

  • February 9, 2016

我有許多具有相同前綴和相同後綴的文件。我想從文件名中刪除兩者。兩者都包含空格。

所以foo bar XXX doo par.jpgfoo bar YY YY doo par.jpg會變成XXX.jpgYY YY.jpg

帶前名:

設置:

$ 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以實際執行這些動作)

如果文件名在變數中,則刪除前綴的規範方法是:

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"

了解引號是處理帶空格的文件名的必要條件。

引用自:https://unix.stackexchange.com/questions/260684