Files
如何從給定目錄中的文件名中刪除前綴和後綴?
我有許多具有相同前綴和相同後綴的文件。我想從文件名中刪除兩者。兩者都包含空格。
所以
foo bar XXX doo par.jpg
,foo bar YY YY doo par.jpg
會變成XXX.jpg
和YY 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"
了解引號是處理帶空格的文件名的必要條件。