2009-09-30 6 views
17

名前に削除する共有パターンを持つファイルが多数あります。たとえば、私はファイル "a_file000.tga"と "another_file000.tga"を持っています。私は新しい名前、 "a_file.tga"と "another_file.tga"という結果に名前からパターン "000"を削除するファイルを操作したいと思います。BASHを使用して特定の文字をファイル名から削除する方法

for file in *; do mv "${file}" "${file/000/}"; done 

答えて

30

は(これは同様に、昔ながらのボーンshで動作)、これを試してみてください:

for i in *000.tga 
do 
    mv "$i" "`echo $i | sed 's/000//'`" 
done 

どちらの引数

はにスペースをサポートするために、引用符で囲まれ

+0

+1ほとんどのポータブルソリューション(と私はupvotes _all_良い答えを維持するために低すぎる実行しているため)。 –

33

バッシュはsed様の置換を行うことができますファイル名。

+0

:それはあなたの名前の変更のためのperl正規表現、例えばを使用することができます。簡潔で簡潔なありがとう。 – jamesnotjim

+0

ニース、 "{"の機能を説明できますか? – efrem

+0

@efrem:中括弧は変数名のオプションの区切り文字で、パラメータの展開に必要です。詳細については、[Bash Manual](https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion)を参照してください。 –

8

非bashのソリューション私は2枚の迅速なポスターを知っているので、すでにことをカバーしている:

一部のシステムではデフォルトでインストールされているrenameと呼ばれる優秀な短いPerlプログラムがあります(他の人はあまり有用リネームプログラムを持っています) 。

rename 's/000//' *000*.tga 
4
#!/bin/bash 
ls | while read name; do 
    echo mv $name ${name/$1//} 
done 
OS X(10.6.8)でうまく動作
+1

+1:私は '| 「読み込み」を行う。 – Cascabel

+3

"ls | read name"は "name"の "*"よりどのように優れていますか? –

+0

@Laurence Gonsalves:シェルワイルドカードを使用するとコマンドラインが拡張されますが、それほど大きな制限はありません。 "読んでいる間は" – Javier

関連する問題