特定のファイル形式のファイル名のみを変更するように `while read; mv printf`コードを修正するにはどうすればよいですか?

特定のファイル形式のファイル名のみを変更するように `while read; mv printf`コードを修正するにはどうすればよいですか?

問題のコード:

ls | cat -n | while read n f; do mv "$f" `printf "video_%03d.mp4" $n`; done

上記のコードは、実行ディレクトリのすべてのファイル/フォルダ名を次のように変更します。

video_001.mp4
video_002.mp4
video_003.mp4
and so on... 

ただし、特定の種類のファイルのみをターゲットとして指定することをお勧めします。たとえば、.mp4すべてのもの(ディレクトリを含む)の名前を変更するのではなく、ファイル名のみを変更することをお勧めします。

答え1

.mp4これにより、解析せずにすべてのファイルの名前が変更されますls

i=1; for file in *.mp4; do mv "$file" $(printf "video_%03d.mp4" "$i"); i=$((i + 1)); done

ステートメントにはすべてのglobを使用できますfor file in ...。を使用して他の基準を適用できますfind

関連情報