👋
特定の拡張子(html)のファイルを移動し名前変更するスクリプト
以下のスクリプトを作成した
要件
- ディレクトリ内のhtmlファイル(xyz.html)を新規ディレクトリ(xyz)に移動
- ファイル名を index.html に変更する
- ただし、 index.html と abc.html は対象外
スクリプト
#!/bin/sh
array=(`ls *.html`)
for i in "${array[@]}"
do
if [ $i = "index.html" -o $i = "abc.html" ]; then
continue
fi
dirname=`echo $i | rev | cut -c 6- | rev`
mkdir $dirname
mv $i ./$dirname/index.html
done
使用方法
- ターミナルで対象のhtmlファイルのあるディレクトリに移動
$ cd <ディレクトリのパス>
- 以下のコマンドで実行
$ sh <スクリプトのパス>
ポイント
array=(`ls *.html`)
- lsコマンドの結果(ディレクトリ内のhtmlファイル)を配列に代入
for i in "${array[@]}"
do
if [ $i = "index.html" -o $i = "abc.html" ]; then
continue
- for文で配列arrayから取り出した各要素について処理を行う
- if文で対象外となるファイルについては後続の処理を行わない
dirname=`echo $i | rev | cut -c 6- | rev`
- 変数 dirname に 右辺(echoコマンド以降の結果)を代入
- 右辺では配列 array から取り出した要素(xyz.html)を rev で文字列を反転(lmth.zyx)
- | cut -c 6- | で反転させた文字列の6文字目以降を切り出す(zyx)
- 再度 rev で文字列を反転(xyz)
- これで要素 xyz.html から拡張子の部分(.html)を除いた xyz の部分のみを取り出すことができた
- $i が xyz.html のとき、dirname には xyz が代入される
mkdir $dirname
mv $i ./$dirname/index.html
- mkdir で移動先の $dirname(xyz) ディレクトリを作成
- mv で htmlファイル(xyz.html) を $dirnameディレクトリ(xyz)に移動しindex.htmlに名前を変更(xyz/index.html)
Discussion