web-dev-qa-db-ja.com

特定のディレクトリのファイル名からプレフィックスとサフィックスを削除するにはどうすればよいですか?

同じプレフィックスと同じサフィックスを持つファイルがたくさんあります。ファイル名から両方を削除したい。どちらにもスペースが含まれています。

したがって、foo bar XXX doo par.jpgfoo bar YY YY doo par.jpgXXX.jpgおよびYY YY.jpgになります

2
John Taylor

プレネーム付き:

セットアップ:

$ 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を削除します)

3
PSkocik

ファイル名が変数内にある場合、プレフィックスを削除する標準的な方法は次のとおりです。

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"

スペースを含むファイル名を処理するには、引用符が必須であることを理解してください。

3
user79743