👋

特定の拡張子(html)のファイルを移動し名前変更するスクリプト

2022/01/10に公開

以下のスクリプトを作成した

要件

  • ディレクトリ内の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

使用方法

  1. ターミナルで対象のhtmlファイルのあるディレクトリに移動
$ cd <ディレクトリのパス>
  1. 以下のコマンドで実行
$ 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コマンド以降の結果)を代入
    1. 右辺では配列 array から取り出した要素(xyz.html)を rev で文字列を反転(lmth.zyx)
    2. | cut -c 6- | で反転させた文字列の6文字目以降を切り出す(zyx)
    3. 再度 rev で文字列を反転(xyz)
    4. これで要素 xyz.html から拡張子の部分(.html)を除いた xyz の部分のみを取り出すことができた
    5. $i が xyz.html のとき、dirname には xyz が代入される
mkdir $dirname
mv $i ./$dirname/index.html
  1. mkdir で移動先の $dirname(xyz) ディレクトリを作成
  2. mv で htmlファイル(xyz.html) を $dirnameディレクトリ(xyz)に移動しindex.htmlに名前を変更(xyz/index.html)

Discussion