やりたいこと
ディレクトリ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行で書ければ・・・