3

次のような一連のファイルがあります。

  • oldname_1.txt
  • oldname_1.pdf
  • oldname_1.bak

など..それぞれに異なる拡張子を付けて、「oldname」を「newname」に名前変更する必要があるので、試しました:

rename -v 's/\oldname_*.*$/\newname_*.*/’ oldname_*.*

しかし、それはうまくいきません..

なにか提案を ?

4

2 に答える 2

4

ファイルの名前を変更する 1 つの方法:

for i in oldname*; do mv "$i" "${i/oldname/newname}"; done
于 2012-09-06T03:01:48.763 に答える
3

まず、「機能しない」が実際に何を意味するのかを具体的に指定する必要があります。それは何もしませんか?それらの名前を間違って変更していますか?それはあなたの解剖学的構造の特定の私的な部分に電気パルスを送りますか? :-)

いずれにせよ、私はから始めます:

rename -v 's/^oldname/newname/' oldname_*.*

実際の式にワイルドカードを含める必要はありません。特に、それはあなたが考えているものとは異なることを意味するためです (xyz_*xyz、0 個以上の_文字が続くことを意味し、その後に何かが続くことを意味するわけではなく、ゼロを意味するため、単にトラブルを求めているだけです) 。またはそれ以上の任意の文字)。xyz_.*

ファイル名のフィルタリングは、最後の引数によって行われます。その引数に一致するファイルのみが名前変更されることがわかっているので、正規表現を調整して最初のビットを変更するだけです。


さらに、権利があることを確認してくださいrenamerename異なる構文を持つ 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
于 2012-09-06T02:40:49.123 に答える