その名前のリストに従って番号が付けられたファイルの名前を変更します。

その名前のリストに従って番号が付けられたファイルの名前を変更します。

正しい名前の.txtファイルを使用してファイルの名前を変更したいと思います。以下は私のファイルです。

lesson1.mp4
lesson2.mp4
lesson3.mp4
...

これは私のtxtファイル名です。

1 Entry to vim
2 Basics of vim
3 Vim motion
...

私が望む結果は次のとおりです。

1 Entry to vim.mp4
2 Basics of vim.mp4
3 Vim motion.mp4

ベストアンサー1

はい、テキストファイルの行を配列として読み込み、各ファイル名から数字を抽出し、1を引いて配列インデックス(bash開始位置0)として使用して、配列内の対応する要素を選択できます。

readarray -t dest < names_list.txt
for f in lesson*.mp4; do i=${f:6:-4}; mv -- "$f" "${dest[i-1]}.mp4"; done

zshインデックスが最初から始まる点を除き、 と似ているため、1ファイル名番号から 1 を引く必要はありません。

zmodload zsh/mapfile
dest=( ${(f@)mapfile[names_list.txt]} )
for f in lesson*.mp4; do i=${f:6:-4}; mv -- "$f" "${dest[i]}.mp4"; done

おすすめ記事