2016-03-29 7 views
0

私は非常に単純なmp3プレーヤーを持っています。オーディオファイルを再生する順番はファイル名に基づいており、最初に3つの数字が必要ですなど、ファイル名:fishshellを使用してファイルに番号を追加する方法

001file.mp3 
002file.mp3 
003file.mp3 

私は、ディレクトリのファイルに番号を追加するには、魚のシェルsortmp3を書きたいです。ディレクトリmyfilesのファイルが含まれていると言う:私はsortmp3 myfilesを実行すると

aaa.mp3 
bbb.mp3 
ccc.mp3` 

、ファイル名に変更されます。

001aaa.mp3 
002bbb.mp3 
003ccc.mp3 

しかし、私の質問は:

  1. いくつかの連続番号を生成する方法?
  2. 各番号のサイズが正確に3であることを確認するにはどうすればよいですか?

答えて

3

私はこれを書くと、ディレクトリにあるファイルの数に関する仮定行うものではありません:

function sortmp3 
    set -l files * 
    set -l i 
    for i in (seq (count $files)) 
     echo mv $files[$i] (printf "%03d%s" $i $files[$i]) 
    end 
end 

動作方法が好きな場合は、「エコー」を削除してください。

2

seqツール(外部プログラム)で連続番号を生成できます。

これは、最初の部分のみを処理し、3文字には埋め込まれません。

それを行うには、さまざまな選択肢があります:

printf '%s\n' 00(seq 0 99) | rev | cut -c 1-3 | rev 
printf '%s\n' 00(seq 0 99) | sed 's/^.*\(...\)$/\1/' 

00(seq 0 99)部分が先頭に追加2ゼロで「1」〜「99」から数値を生成します - すなわち。 「001」から「0099」に変更する。パイプラインの後半部分で余分なゼロが再び削除されます。

または次の魚のバージョンでは、新しいstringツールを使用することができます

string sub -s -3 -- 00(seq 0 99) 
+1

なぜだけではなく、「printf関数 『%N \ 03D』(配列0 99)」? –

+0

私はそれを考えなかったので(私はしばしばprintfのほとんどを使用しません)...それは間違いなく良いことです。 – faho

2

状況に応じて、連続番号を生成するには "seq"コマンドを使用するか、カウンタをインクリメントするには "math"コマンドを使用する必要があります。先行ゼロの予測可能な数と番号をフォーマットするには、「printfの」コマンドを使用します。

set idx 12 
printf '%03d' $idx 
関連する問題