ファイルなどの名前を変更する方法は知っていますが、これに問題があります。
名前を変更する必要があるのはtest-this
forループ内。
test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext
test-this.volume003+08.ext
test-this.volume004+16.ext
test-this.volume005+32.ext
test-this.volume006+64.ext
test-this.volume007+78.ext
これらすべてのファイルが1つのフォルダーにあり、Linuxを使用している場合は、次を使用できます。
rename 's/test-this/REPLACESTRING/g' *
結果は次のようになります。
REPLACESTRING.ext
REPLACESTRING.volume001+02.ext
REPLACESTRING.volume002+04.ext
...
rename
は、最初の引数としてコマンドを取ることができます。このコマンドは、4つの部分で構成されています。
s
:文字列を別の文字列に置き換えるフラグ、test-this
:置換する文字列、REPLACESTRING
:検索文字列を置換する文字列、およびg
:検索文字列のすべての一致が置き換えられることを示すフラグ。つまり、ファイル名がtest-this-abc-test-this.ext
の場合、結果はREPLACESTRING-abc-REPLACESTRING.ext
になります。フラグの詳細な説明については、man sed
を参照してください。
以下に示すようにrename
を使用します。
rename test-this foo test-this*
これにより、test-this
ファイル名にfoo
を含む。
rename
がない場合は、以下に示すようにfor
ループを使用します。
for i in test-this*
do
mv "$i" "${i/test-this/foo}"
done
私はOSXを使用していますが、bashにはrename
が組み込み関数として付属していません。最初の引数を受け取る.bash_profile
で関数を作成します。これは、1回だけ一致する必要があるファイル内のパターンであり、その後に何が来るかを気にせず、引数2のテキストに置き換えます。
rename() {
for i in $1*
do
mv "$i" "${i/$1/$2}"
done
}
test-this.ext
test-this.volume001+02.ext
test-this.volume002+04.ext
test-this.volume003+08.ext
test-this.volume004+16.ext
test-this.volume005+32.ext
test-this.volume006+64.ext
test-this.volume007+78.ext
rename test-this hello-there
hello-there.ext
hello-there.volume001+02.ext
hello-there.volume002+04.ext
hello-there.volume003+08.ext
hello-there.volume004+16.ext
hello-there.volume005+32.ext
hello-there.volume006+64.ext
hello-there.volume007+78.ext