Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2912

ディレクトリ配下全ファイルからファイル末尾が改行でないファイルを一覧表示するShell Script

$
0
0

作成経緯

GitHubにファイル末尾が改行になっていないファイルをアップすると怒られます。
なぜファイル末尾に改行を入れるのか
入っていないと、エラーになる可能性もあるらしい。

今やっているスクールでは必須要件なので、プロジェクト内のファイルが全て末尾改行になっていることを確かめるツールがあれば、後々楽になるだろうと思い、シェルスクリプトを書いてみることに。bashは一度も書いたことがなかったので練習も兼ねて書いてみます。

動作確認は、今扱っているRailsのビューだけなので、さまざまな条件で期待通り動かすには、それなりの改良が必要と思います。

コード

#!/bin/bashsubject=""
find ./ -type f -print | xargs tail-c 1 | while read line;do 
  if["${line:0:3}"="==>"];then 
    subject=${line}else 
    str=$(echo${line} | xxd -p)if[!"${str}"="0a"];then
      echo"${subject}"fi
  fi
done

説明

find ./ -type f -print | xargs tail-c 1 | while read line;do
  • find ./ -type f -printで実行ディレクトリ以下のファイルを再帰的に検索
  • xargs tail -c 1で検索結果のファイルの最後の文字を取得
  • whileでファイルごとにループ処理
if["${line:0:3}"="==>"];then 
    subject=${line}
  • "${line:0:3}" = "==>”で行頭が”==>”に合致する行を変数に格納する。”==>”はtailコマンドから出力されたファイル名のある行の行頭。
str=$(echo${line} | xxd -p)if[!"${str}"="0a"];then
      echo"${subject}"
  • echo ${line} | xxd -pでファイル末尾文字を16進数の文字コードに変換。xxdは16進数に変換するコマンド。
  • ! "${str}" = "0a"でファイル末尾が”0a”(LF改行)になっていない条件で、ファイル名をechoで標準出力。

参考サイト


Viewing all articles
Browse latest Browse all 2912

Trending Articles