0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

作成経緯

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

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

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

コード

#!/bin/bash

subject=""
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で標準出力。

参考サイト

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?