unix2dos – Unix形式の改行(LF)をDOS/Windows形式(CRLF)へ変換する

サブシェル・グルーピング 改行・空白処理

unix2dos はテキストファイルの改行を LF(Unix/Linux) から CRLF(DOS/Windows) へ変換するコマンドです。BOM の付与/除去や文字コード変換(ISOコードページ/UTF-16の扱い)にも対応します。日常では「Linuxで作成した設定/スクリプトをWindowsで開く前に整形」「混在改行の是正」などで使います。(manpages.debian.org)

構文(Syntax)

# インプレース変換(既定)
unix2dos [OPTIONS] FILE...

# 新しいファイルに書き出し(ペア指定)
unix2dos -n INFILE OUTFILE [INFILE OUTFILE]...

# フィルタとして標準出力へ
unix2dos -O FILE1 [FILE2 ...] > OUTPUT
  • 既定は インプレース-o, --oldfile)。
  • -nIN/OUT をペアで与える必要があります(ワイルドカード不可)。(manpages.debian.org)

主なオプション一覧

オプション説明使用例
-o, --oldfile FILE...既存ファイルをその場で変換(既定)。所有者/権限を保持(Unix)。unix2dos -o notes.txt (manpages.debian.org)
-n, --newfile IN OUT ...新しいファイルへ書き出し。IN/OUT は必ずペアunix2dos -n a.txt a.crlf.txt (manpages.debian.org)
-O, --to-stdout標準出力へ書き出す(パイプ処理用)。unix2dos -O a.txt b.txt > out.txt (manpages.debian.org)
-k, --keepdate出力のタイムスタンプを入力と同じに保つ。unix2dos -k -o file.txt (manpages.debian.org)
-q/ -v静音 / 詳細ログ。unix2dos -v file.txt (manpages.debian.org)
-s, --safe / -f, --forceバイナリを自動スキップ(既定)/強制変換。unix2dos -f binlike.dat (manpages.debian.org)
-b, --keep-bom入力に BOM があれば出力にも残す(DOS側既定)。unix2dos -b utf8bom.txt (manpages.debian.org)
-r, --remove-bomBOM を出力しないunix2dos -r utf8.txt (manpages.debian.org)
-m, --add-bom出力に BOM を付与(既定は UTF-8)。unix2dos -m log.txt (manpages.debian.org)
-u, --keep-utf16UTF-16 入力を UTF-16 のまま出力(LE/BE保持、BOM付与)。unix2dos -u -n in.txt out.txt (manpages.debian.org)
-ul / -ubBOM の無い UTF-16 を LE/BE と仮定して処理。unix2dos -ul -n in.txt out.txt (manpages.debian.org)
-c {ascii,7bit,iso,mac}変換モード(ascii既定。isoは Latin-1 と各CP間の変換、macでMac改行↔変換)。unix2dos -c iso -n latin1.txt cp850.txt (manpages.debian.org)
-437/-850/-860/-863/-865/-1252ISO 変換時のDOS/Windowsコードページ指定。unix2dos -850 -n in.txt out.txt (manpages.debian.org)
-i[FLAGS], --info[=FLAGS]変換せずに改行/BOMなどの情報を表示。unix2dos -ic *.txt (manpages.debian.org)
-e, --add-eol / -l, --newline最終行に改行を付与 / 追加の改行を入れる(挙動は man 参照)。unix2dos -e -O a.txt b.txt > out.txt (manpages.debian.org)
-F/-R/-Sシンボリックリンク: 追従/置換/スキップ。unix2dos -F docs/* (manpages.debian.org)

BOMの既定unix2dos は「入力に BOM があれば出力にも BOM を付ける」動作が既定です(-r で除去、-m で常に付与)。dos2unix は逆に既定で BOM を書きません。(manpages.debian.org)

実行例

Windows向けにCRLFへインプレース変換

説明: 既存ファイルを書き換えて LF→CRLF にします。
コマンド:

unix2dos -o README.md

元ファイルを残しつつ別名で保存(安全運用)

説明: -nIN/OUT のペアを必ず指定します。
コマンド:

unix2dos -n script.sh script.crlf.sh

(ペアで指定しないとエラーになります) (manpages.debian.org)

連結用にフィルタ出力(最終行に改行を保証)

説明: 2つのファイルを CRLF で整形しつつ結合します。
コマンド:

unix2dos -e -O part1.txt part2.txt > merged.txt

-O は標準出力へ、-e は最終行の改行不足を補います) (manpages.debian.org)

BOM の制御(付与/除去)

説明: Notepad 互換のため BOM を付ける、または不要なら外す。
コマンド:

unix2dos -m report.txt      # BOM を付与(UTF-8 BOM)
unix2dos -r utf8bom.txt     # BOM を除去して CRLF 化

(manpages.debian.org)

ISOコードページを指定して変換(Latin-1→CP850例)

説明: 文字集合の相互変換を伴う CRLF 化。
コマンド:

unix2dos -c iso -850 -n latin1.txt out_cp850.txt

(manpages.debian.org)

エラー例:-n のペア不足

説明: -n で IN/OUT を片方だけ指定すると失敗します。
コマンド:

unix2dos -n a.txt

出力例(例):

files must be specified in pairs for --newfile

(正しくは unix2dos -n a.txt a.crlf.txt) (manpages.debian.org)

関連コマンド

  • dos2unix:CRLF/CR → LF へ変換(逆方向)。BOM 既定は出力しない。(manpages.debian.org)
  • mac2unix / unix2mac:旧Mac形式(CR)の相互変換(-c mac と同等)。(manpages.debian.org)
  • file:ファイル種別や BOM/エンコーディング検出。
  • iconv:文字コード変換(CP ↔ UTF-8 等)。(manpages.debian.org)
  • sed / tr:簡易な改行置換の代替。(Stack Overflow)

備考

  • 再帰処理:ディレクトリ配下の一括変換は find ... -print0 | xargs -0 unix2dos のように実現(man に例あり)。(manpages.debian.org)
  • バイナリ判定:既定でバイナリはスキップしますが万能ではありません。確信がある場合のみ -f を使用。(manpages.debian.org)
  • Macモード-c mac で Mac 改行(CR)との相互変換に切り替わります。専用コマンド unix2mac も同等。(manpages.debian.org)
  • コードページ-c iso-437/-850/... を併用して DOS/Windows の各CPへ。Unicode(UTF-8/UTF-16)には ISO/7bit 変換を使わないでください。(manpages.debian.org)
  • 権限/所有者:インプレース時は元の所有者/グループ/権限を保持。保持できない場合は中止されます(必要なら --allow-chown 参照)。(manpages.debian.org)

参考

Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント