ファイルを変更せずにファイルがCRLFまたはLFを使用しているかどうかをテストするにはどうすればよいですか?

ファイルを変更せずにファイルがCRLFまたはLFを使用しているかどうかをテストするにはどうすればよいですか?

特定の内容を確認するには、定期的にコマンドを実行する必要があります。テキストファイルはLinuxモードで保存されます。残念ながら、dos2unixファイルは常に変更され、ファイルとフォルダのタイムスタンプが混乱し、不要な書き込みが発生します。

私が書いたスクリプトはBashにあるので、Bashベースの答えを好みます。

答え1

注:これは迅速な確認のためにのみ自動化スクリプトで使用しないでください。自動化スクリプトの場合は、他の回答を確認することをお勧めします。

使用cat -A

$ cat file
hello
hello

このファイルが* NIXシステムで生成された場合は、以下が表示されます。

$ cat -A file
hello$
hello$

ただし、このファイルがWindowsで作成されると、次のように表示されます。

$ cat -A file
hello^M$
hello

^M代表しCR$代表しますLF

私はWindowsではWindowsメモ帳を使用し、LinuxではVimを使用します。 Windowsメモ帳は最後の行を保存しませんCRLF

また、ファイルの内容は変更されません。

答え2

dos2unixこれをフィルタとして使用し、出力を元のファイルと比較できます。

dos2unix < myfile.txt | cmp - myfile.txt

答え3

タイムスタンプに影響を与えないことが目標である場合は、タイムスタンプを同じままにするかオプションがdos2unixあります。一時ファイルを作成して名前を変更するには書き込み操作を実行する必要がありますが、タイムスタンプは影響を受けません。-k--keepdate

ファイルの変更が許可されていない場合は、次の回避策を使用できます。この回答

find . -not -type d -exec file "{}" ";" | grep CRLF

これらのライン終了が検出されると、このfileコマンドが出力されます。CRLF

答え4

grepCRLFコードである8進数を試すことができます。

grep -U $'\015' myfile.txt

または16進数:

grep -U $'\x0D' myfile.txt

関連情報