同じプレフィックスと同じサフィックスを持つファイルがたくさんあります。ファイル名から両方を削除したいと思います。両方ともスペースを含みます。
したがって、それはなります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"
スペースを含むファイル名を処理するには、引用符を理解する必要があります。