2013-08-25 10 views
8

私は例えば、「0.1' で終わるファイルの数を持っている:Linux/Unixでは複数のファイルをある拡張子から別の拡張子にリネームする方法はありますか?

example.file.ex1.1 
example.file.ex2.1 
example.file.ex3.1 

私はすぐに終わりに」0.1' せずに、すべての名前を変更することができる方法(例えば例があります.file.ex1、example.file.ex2など)?

ありがとうございます!

+3

この質問は、それは[UNIXとLinux](http://unix.stackexchange.com/) –

+0

すべての偉大な答えのために、より適しているため、オフトピックであるように思われます。ありがとう! – user2716340

+2

私は試したが、明らかに十分な "評判"がない。 =) – user2716340

答えて

5

ピュアbashのソリューション:

for curFile in example.file.*.1; do 
    mv -- "$curFile" "${curFile:0:-2}" 
done 
12

はい、renameでこれを試してください:あなたのテストが有効な場合

rename -n 's/\.1$//' * 

-n(ドライランモードスイッチ)を取り外します。

warning http://pix.toile-libre.org/upload/original/1377510865.pngは、またはこれを行うことができるので注意してもしなくてもよいと同じ名前を持つ他のツールがあります。


次のコマンド(linux

$ file $(readlink -f $(type -p rename)) 

を実行し、

.../rename: Perl script, ASCII text executable 

のような結果を持っている場合、これは

)=適切なツールであると思われます

そうでない場合は、 Debian及びデリバティブなどのUbuntu上のデフォルト(通常はすでにケース):

$ sudo update-alternatives --set rename /path/to/rename 

少なくとも最後にではなく、は、このツールはもともとラリー・ウォール、Perlのお父さんによって書かれました。

+0

デフォルトの '' rename''がUbuntuやDebian上で動作しない理由を説明できますか? ''/usr/bin/rename -n 's/.1 //' * ''を実行しているように見えますが、デフォルトの名前は変更されません。私は単純にそれを得ることはできません、どちらもperlの表現を許可しますが、一方は動作し、もう一方は動作しません。違いはなんですか? –

+0

デフォルトの名前変更はUbuntu/Debianで動作するはずです –

+0

うん!あなたが正しい。私の悪い –

3

parameter expansionを使用してソリューション:

for curFile in example.file.*.1; do 
    mv "$curFile" "${curFile%.1}" 
done 
+0

ありがとう!それは動作します: f = file.zip;エコー$ {f%.zip}# - > ファイル –

関連する問題