【初級】シェルスクリプト2

問題

指定したディレクトリ以下のすべてのファイルを特定の拡張子(.txtなど)にリネームするシェルスクリプトを作成してください。

※シェルスクリプトの実行に関してはシェルスクリプトを実行してみるを御覧ください。

※directoryディレクトリを作成して、そのディレクトリに移動して、touchコマンドで様々な拡張子のファイルを作成してから実行しましょう。


解答

#!/bin/bash

target_dir=$(pwd)/directory

new_ext=".txt"

for file in "$target_dir"/*; do
	if [ -f "$file" ]; then
		ext="${file##*.}"
		new_file="${file%.*}$new_ext"
		mv "$file" "$new_file"
		echo "Renamed: $file -> $new_file"
	fi
done

解説

※if文の中の解説のみになります。

ext="${file##*.}":

  • file変数の値から、最後のドット以降の部分(拡張子)を抽出してext変数に格納します。

new_file="${file%.*}$new_ext":

  • file変数の値から、最後のドットまでの部分(ファイル名)を取り出し、new_ext変数の値(新しい拡張子)を連結して、新しいファイル名を作成します。

mv "$file" "$new_file":

  • mvコマンドを使って、元のファイルを新しいファイル名にリネームします。

echo "Renamed: $file -> $new_file":

  • リネームしたファイルの元の名前と新しい名前を表示します。
マインクラフト用ビジュアルエディタを開発しています。
詳しくはinunosinsi/mcws_blockly - githubをご覧ください。