最近LinuxからWindowsに戻りました。 CRLFを含むファイル、LFを含むファイル、および混在しているファイルがあります。 Unixで処理されたすべてのファイルを見つけ、適切なCRLF終了ファイルに変換するのに役立つユーティリティはありますか?
ユーティリティは、LinuxではなくWindowsで実行する必要があります。もう引っ越しました。回避できれば Cygwin をインストールしたくありません。
Linuxプラットフォームのunix2dos
ユーティリティで変換できます。 unix2dos
Windowsで利用可能なバージョン もあります。
Perlがインストールされている場合は、次の1つのライナーも使用できます。
Perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt
ここに簡単で迅速な方法があります。
テキストファイルをChrome(他のブラウザについては知りません))にドラッグアンドドロップしてから、元のファイルにカットアンドペーストします:)
フォルダーを再帰的に処理し、ファイルフィルターを許可し、 "\ r\n"の単純な検索を許可し、 "\ n"だけで置き換えるのに最も適しているのは Notepad ++ でした。
Notepad ++は、Windowsに最適な無料のオープンソースのメモ帳プログラムの1つです。とてもシンプルでパワフルです。それは行末の検索/置換をうまく処理しました。請負業者はLinuxの行末で.cおよび.hファイルの束をリポジトリにチェックインしますが、ほとんどの人はWindows/Eclipseビルドツールで標準化しているため、ファイルは行末が変換されるまでビルドされません。
スイスファイルナイフ を使用します。
例えば: sfk addcr -dir . -file .txt -norec
changes LF WindowsのCR/LFで終わる、現在のディレクトリのすべての.txtファイルで、サブディレクトリ内ではない(再帰なし)。
しかし、このプログラムはそれだけではありません。
Cygwinでは、2つの組み込みユーティリティを使用して、Unixと "DOS" AKA Windowsファイルを変換できます。
DOS CR/LF形式に変換します。
u2d filename
Unix CR形式に変換します。
d2u filename
ファイルは同じ名前のまま残ります。
楽しい!リック
私はこの解決策をそこに捨てます。 Gitがこれを行います。 それについてはこの投稿を参照してください
理論的には、これを実行してツリー全体を変換できます
cd root/of/tree
git init .
git add .
git commit -m "initial commit"
echo "* text eol=crlf" > .gitattributes
git rm --cached -r .
git reset --hard
逆にしたい場合は、crlf
をlf
に変更します。注:まだ完了していません。読み続けてください
git status
と入力して、影響を受けるファイルを確認します。次のような行を追加する必要があるかもしれません
*.jpg binary
*.png binary
*.gif binary
.gitattributes
などに変換して、特定のファイルの変換を回避します。特定のファイルをテキストとして明示的にマークすることもできます
*.md text
*.css text
次に、.gitattributes
を編集した後、これらの2行を繰り返します。
git rm --cached -r .
git reset --hard
次に、再度git status
を使用して、変更されるファイルを確認します。影響を受けるすべてのファイルがgit status
にリストされていることを確認したら、コミットします
git add .
git commit -m "normalize line endings"
すべてのファイルをもう一度チェックアウトします
git rm --cached -r .
git reset --hard
彼らは今あなたの望む行末が何であっても持っているはずです
**注:すでにgitを使用している場合は、最初の3つのコマンドgitコマンドをスキップしてください。 gitを使用していない場合は、.gitattributes
ファイルと.git
フォルダーを削除できます。
**ファイルをバックアップします:git rm --cached -r
はそれらをすべて削除します(理論的にはgitリポジトリ(.gitフォルダー)にありますが、これは最後のコマンドgit reset --hard
によって復元される方法です)。ファイルが削除されているので、バックアップすることをお勧めします。
SciTE のような両方の行末を理解するテキストエディターを使用します。または、すべてのファイルですべての行末を変換する必要はないが、単に望まない場合は、 Notepad ++ のようにします。ファイル全体を最初の行にまとめて表示します。
Get AWK for Windows 。
Unixの行末をWindowsの行末に変換します。
awk 'sub("$", "\r")' unixfile.txt > winfile.txt
Windowsの行末をUnixの行末に変換します。
awk '{ sub("\r$", ""); print }' winfile.txt > unixfile.txt
awk
の古いバージョンには、sub
関数が含まれていません。そのような場合は、同じコマンドを使用しますが、awk
をgawk
またはnawk
に置き換えます。
TEXTファイルのeoln文字を翻訳するには多くの方法があり、誰もがお気に入りです。
しかし、私は常にバイナリモードでLinuxからWindowsにファイルを転送し、その後、両方のタイプを開き、必要に応じていずれかの形式で保存できるエディターでTEXTファイルをWindowsで開きます。
私はこれにProgrammers File Editorを使用しましたが、Notepad ++でも実行できます。ワードパッドも便利です(少なくとも表示 LF終了ファイルの場合)]。
Linuxで作成された可能性があり、Windowsの(事実上の標準)の世界で読み取り可能である必要がある単純なテキストファイルを考えています。 「unix-touched files」が何を意味するのかわかりません。
Wikipedia cmdに解決策があります:
TYPE unix_file | FIND /V "" > dos_file
PowerShellでは、 この質問 で行われたことを逆にすることでそれを行うさまざまな方法があります。
(Get-Content $file -Raw).Replace("`n", "`r`n") | Set-Content $path -Force
(Get-Content $infile) -join "`r`n" > $outfile
$text = [IO.File]::ReadAllText($original_file) -replace "`n", "`r`n"
[IO.File]::WriteAllText($original_file, $text)
VBScript および JScript でもこれを行うことができます。これらは、サードパーティのアプリケーションをインストールしなくてもWindowsですでに利用可能なツールでもあります。
私のLinuxディストリビューションには、このタスクに使用するfromdos
およびtodos
という2つの小さなユーティリティがあります。
より多くのオプションを提供するには(私が一番楽しんだとしても ser45832のハック回答 ):
オンラインコンバーター
バッチ/ DOSワンライナー(空の行を削除):
FOR /F "eol= delims= usebackq" %a IN (infile.txt) DO (ECHO %a>> outfile.txt)
Powershell:
gc infile.txt | %{$_.split("`n")} | Out-File outfile.txt
最後の2つを得た ここから