2017-05-24 15 views
0

の最初の部分を維持するファイル:名前の変更は、順次、私はこれらのファイルを持っている名前

NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.0 
NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.1 
NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.2 
NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.3 
NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.4 

そして、私はこのように名前を変更したいと思います:

NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_1.csv 
NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_2.csv 
NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_3.csv 
NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_4.csv 
NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_5.csv 

私は次のことを試してみました(といくつかのバリエーションました)が、何の成功を得なかっ:

rename -v 's/(NIHMS.+tons).csv.+/\1_[0-9]\.csv/' *.csv* 

ls *csv* | sed -E 's/(NIHM.+tons)\.csv.*$/\1_{1..5}.csv/' 

ls *csv* | cat -n | while read n f; do mv "$f" "$f_$n.csv"; done 

私が与えた最後のものを使用していただ最も近いが私は好き:

1.csv 2.csv 3.csv 4.csv 5.csv 

を、私は私のpythonを使用してこれを行うことができますかなり確信しているが、私はしようとしていますコマンドライン/ bashを介して、好ましくは正規表現を使用しています(これは私がよく学ぶことを試みています)。

+1

これは数値を1つ増やすように見えますが、受け入れられる答えはありません。本当に目的の行動は何ですか? –

+0

@ベンジャミンW.私は自分自身で質問したいことを説明し、希望する出力の例を掲載しました。私が言った最後のことは、私が得たものを実証することでした。 –

+1

はい、問題の望ましい出力によれば、番号付けは0,1,2,3,4から1,2,3,4,5に変わりますが、受け入れられた回答は直接マップします。 –

答えて

2

は、ファイル名のセクションを保存し、それらを交換し、SEDで新しい名前を作成します。安全のために

for file in *.csv.[0-9]*; do 
    new_name=$(echo $file | sed 's/\(.*\)\.csv\.\([0-9]*\)/\1_\2.csv/') 
    echo mv $file $new_name 
done 

を、私はMVに前にエコーに入れて。結果がよく見える場合は、エコーを取り出してください。ここに私の結果は以下のとおりです。あなたがこれを行うことが

[[email protected] ~]$ for file in *.csv.[0-9]*; do new_name=$(echo $file | sed 's/\(.*\)\.csv\.\([0-9]*\)/\1_\2.csv/'); echo mv $file $new_name; done 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.0 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_0.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.1 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_1.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.10 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_10.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.11 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_11.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.2 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_2.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.3 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_3.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.4 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_4.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.5 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_5.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.6 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_6.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.7 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_7.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.8 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_8.csv 
mv NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons.csv.9 NIHMS735398-supplement-Supplemental_Table_-_Top_Down_MS_Identificaitons_9.csv 
[[email protected] ~]$ 
2

一つの方法は、bashのパラメータ置換を使用することです:d変数は、ファイル名の最後の桁に設定されます

for f in *.csv.* ; do d="${f##*.}" ; mv "$f" "${f%*.csv*}__$((d+1)).csv" ; done 

、その後でそれを置き換えますmv。 Bashの正規表現を

+0

数字はここでは増えませんよね? –

+0

@ベンジャミンW:いいえ、ファイル名のものを使用します。 –

+0

しかし、希望の名前を見ると、それは増分するべきです。 –

1

:出力が正しいと思われるとき

re='(.*)\.csv\.([[:digit:]]+)$' 
for f in *; do 
    [[ $f =~ $re ]] 
    echo mv "$f" "${BASH_REMATCH[1]}_$((${BASH_REMATCH[2]} + 1)).csv" 
done 

echoを削除することができます。

目標は、入力ファイル数をincremenentすることはありませんが、順次1から始まるファイルの番号が付けられている場合は、コードは次のように変更することができます:

re='(.*)\.csv\.[[:digit:]]+$' # Just one capture group 
i=1 
for f in *; do 
    [[ $f =~ $re ]] 
    echo mv "$f" "${BASH_REMATCH[1]}_$((i++)).csv" 
done 

今のファイルが1番され、2 、3、...アルファベット順の入力順。

0

テストされていない、私はコンピュータではないけど、renameとあなた自身の努力に基づいて、これは近いはずよう:「.CSV」

rename -n '($a,$b)=split /.csv./; $_=$a . ($b+1) . ".csv"' *csv* 

splitが前にすべてを置く必要があります$aとそれ以降はすべて$bになります。 2番目の部分は出力($_)を$aに設定し、続いて$b+1に ".csv"を追加します。

関連する問題