アルファベット順ファイルリストのファイル順に変数を作成します。

アルファベット順ファイルリストのファイル順に変数を作成します。

私は初めてbashシェルスクリプトゲームに触れましたが、かなりよく慣れました。現在、自動id3データ編集またはmp3ファイル用のスクリプトを作成しています。私は現在id3v2コマンドラインプログラムを使用しています。私が録音した警察スキャナプログラムのmp3ファイルです。ファイル番号に関連する変数を作成する方法がないかと思ったのですが…これをどのように表現すべきかわかりませんね。申し訳ありませんが、最近頭が痛いです。私はこれをそう説明できる。

したがって、録音ディレクトリにある場合は、録音時間がファイル名の一部であるため、簡単に順番に一覧表示できます。したがって、一般的なlsコマンドは同様の結果を生成します

File_012030.mp3
File_012040.mp3
File_012045.mp3

変数を使用して各ファイルのid3データにトラック番号を割り当てたいと思います。私の最初の考えは、そのディレクトリ内のファイルのリストからその場所の番号を何とか使用することでした。だから上記の例はこんな感じです。

File_012030.mp3 <- 01
File_012040.mp3 <- 02
File_012045.mp3 <- 03

これは可能ですか?

答え1

forループとカウンターを使用してください。

k=1; for file in *mp3; do
        id3v2 --track "$k" "$file"
        ((k++))
     done

これにより、名前で終わるすべてのファイルとディレクトリが繰り返され、mp3各ファイルとディレクトリがとして保存されます$file。その後、$k変数は反復(((k++)))ごとに増加し、$kファイルの処理順序に応じてファイル番号が増加します。使用できます--track "$k"。トラック番号を設定します。

答え2

次のように簡単にできます(改行文字を含むファイル名でも機能します)。

arr=(*)

pwdのすべてのファイル名は配列に格納され、その番号にアクセスされます(例:"${arr[2]}"

アスタリスクは、echo *ls、try、またはlsと非常によく似ており、mp3のtryを選択してecho *.mp3実際にどのように見えるかを確認するために使用されます。

次のコマンドを使用して、すべてのファイルのリストを表示できます。

printf '%s\n' "${arr[@]}"

その後、ループを使用して各ファイル名を処理できます。

for (( i=0 ; i<${#arr[@]} ; i++ )); do
    id3v2 --track "$((i+1))" "${arr[@]}"
done

関連情報