2016-07-08 5 views
0

私は学生ですから、私は非常にbashを初めて使っています。bashを使用してハイフンとハイフンの間のファイル名を変更する

local_date_1415 + 6556_0001.txtとlocal_date_1415 + 6556_0002.txtのようなファイルの名前を変更しようとしています。

例ファイル名:uuw_07052006_1415 +

私は "2M1415 + 6556" のように、その前に2Mを持つように、各ファイル名の "1415 + 6556" のセクションを必要とする6556_0001.txt。フォルダ内のファイルの約半分は既に2Mを持っているので、文字列を検索して置き換えることはできません。

デリミタとして "_"を使用してファイルのバッチの名前を変更する方法はありますか?そうすれば、すべての3番目のセクションをすべて正しい文字列に置き換えることができますか?

私は自分のマシン上でrenameコマンドを実行していますが、ここでどのように使用するかは分かりません。

+0

何renameコマンドやるあなたが持っている、[名前の変更](http://linux.die.net/man/1/rename)または[名前の変更]:

また、自分でループを書くことができますhttp://manpages.ubuntu.com/manpages/trusty/man1/prename.1.html)? – choroba

+0

また、ファイル名の例を示してください。「ローカル日付」にはどのような形式がありますか? – choroba

+0

どのようにチェックするのですか? – morepenguins

答えて

0

renameのバージョンを使用して:あなたのファイル名が%が含まれていない場合

rename _ % *_????+*.txt # replace the first underscore with a percent 
rename _ _2M *_????+*.txt # add 2M after the second underscore 
rename % _ *_2M????+*.txt # return the first underscore back 

のみ動作します。そうであれば、別の文字を選んでください。 (

#! /bin/bash 
for f in *_????+*.txt ; do 
    before=${f%[0-9][0-9][0-9][0-9]+*} 
    after=${f#*_[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]} 
    mv "$f" "$before"2M"$after" 
done 
+0

ありがとうございます!問題は、私のファイルの半分が既に2Mを持っていることです。それをプログラムする方法はありますか?既にそこにある場合、2Mを追加しませんか? – morepenguins

+0

@morepenguins:ああ、申し訳ありませんが更新されました。 – choroba

+0

ありがとう!私はあなたの回答をプラスするのに十分なポイントがまだありません(うまくいけば私は後でします)。それは完璧に働いた。私は最初のコードで最後の行に1つの変更を加えました: 'rename%_ * _2M ???? + *。txt'' – morepenguins

関連する問題