同じプレフィックスと同じサフィックスを持つファイルがたくさんあります。ファイル名から両方を削除したい。どちらにもスペースが含まれています。
したがって、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"
すべてが1つのスクリプトに参加しました:
#!/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"
スペースを含むファイル名を処理するには、引用符が必須であることを理解してください。