次のような一連のファイルがあります。
- oldname_1.txt
- oldname_1.pdf
- oldname_1.bak
など..それぞれに異なる拡張子を付けて、「oldname」を「newname」に名前変更する必要があるので、試しました:
rename -v 's/\oldname_*.*$/\newname_*.*/’ oldname_*.*
しかし、それはうまくいきません..
なにか提案を ?
ファイルの名前を変更する 1 つの方法:
for i in oldname*; do mv "$i" "${i/oldname/newname}"; done
まず、「機能しない」が実際に何を意味するのかを具体的に指定する必要があります。それは何もしませんか?それらの名前を間違って変更していますか?それはあなたの解剖学的構造の特定の私的な部分に電気パルスを送りますか? :-)
いずれにせよ、私はから始めます:
rename -v 's/^oldname/newname/' oldname_*.*
実際の式にワイルドカードを含める必要はありません。特に、それはあなたが考えているものとは異なることを意味するためです (xyz_*
はxyz
、0 個以上の_
文字が続くことを意味し、その後に何かが続くことを意味するわけではなく、ゼロを意味するため、単にトラブルを求めているだけです) 。またはそれ以上の任意の文字)。xyz_
.*
ファイル名のフィルタリングは、最後の引数によって行われます。その引数に一致するファイルのみが名前変更されることがわかっているので、正規表現を調整して最初のビットを変更するだけです。
さらに、権利があることを確認してくださいrename
。rename
異なる構文を持つ Linux で利用可能な別のものがあります。
rename oldname newname oldname_*.*
これらのシステムでは、正規表現の変種はしばしば と呼ばれprename
ます。
最後に、ばかげた質問かもしれませんが、ファイルが期待どおりの名前であると確信していますか? シンプルls -al oldname*
にこれを表示する必要があります。
余談ですが、これは私の Debian ボックスで問題なく動作します。
pax> touch oldname_1.txt oldname_1.pdf oldname_1.bak
pax> ll *name*
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.bak
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.pdf
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 oldname_1.txt
pax> rename -v 's/^oldname/newname/' oldname_*.*
oldname_1.bak renamed as newname_1.bak
oldname_1.pdf renamed as newname_1.pdf
oldname_1.txt renamed as newname_1.txt
pax> ll *name*
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.bak
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.pdf
-rw-r--r-- 1 pax pax 0 Sep 6 10:56 newname_1.txt