【diffするだけのshell】シェル芸が出来ないので素直に書いた

やりたいこと

ディレクトリ1とディレクトリ2に入っているソースファイルを比較し、差分があるファイルのリストをつくりたい。

シェル

本当はシェル芸人の人みたいに、かっこよくコマンドラインに1行書いて終わりにしたかったんだけど、出来なかったので普通にシェルを書きました。

#!/bin/bash

# パス

path1="./t1/"
path2="./t2/"
pre="b*"

# 調査対象抽出

ls $path1$pre | cut -d '/' -f 3 > tmp1
ls $path2$pre | cut -d '/' -f 3 >> tmp1

files=`sort tmp1 | uniq`

# 差分あり出力

echo "---差あり--"

for f in $files
do
    diff -c $path1$f $path2$f > /dev/null 2>> tmp_e
    if [ $? = 1 ];then
      # アレンジ例:path2のソースにhogeが含まれていたら印をつける
      grep hoge $path2$f > /dev/null
      if [ $? = 0 ];then
        echo $f hoge
      else
        echo $f
      fi
    fi
done

# 一方のパスにしか無いファイル出力

echo "---ファイルなし--"
cat tmp_e | grep diff | cut -d ':' -f 2

rm tmp1
rm tmp_e

こんなディレクトリ構成で、

$ tree
.
├── diff_t.sh
├── t1
│   ├── a10
│   ├── a11
│   ├── b10
│   ├── b11
│   ├── b12
│   └── b13
└── t2
    ├── a10
    ├── a11
    ├── b09
    ├── b10
    ├── b11
    └── b13

2 directories, 13 files

実行すると、こんな感じです。

$ sh diff_t.sh 
---差あり--
b10 hoge
b13
---ファイルなし--
 ./t1/b09
 ./t2/b12

これを1行で書ければ・・・

GitHub - mako1980/diffshell