最近、LinuxからWindowsに戻りました。CRLFを含むファイル、LFを含むファイル、混合されたファイルがあります。Unixに触れたすべてのファイルを見つけて適切なCRLF終了ファイルに変換するのに役立つユーティリティはありますか?
このユーティリティは、LinuxではなくWindows上で実行する必要があります。私はすでに移動しています。Cygwinを避けることができれば、インストールしたくないです。
最近、LinuxからWindowsに戻りました。CRLFを含むファイル、LFを含むファイル、混合されたファイルがあります。Unixに触れたすべてのファイルを見つけて適切なCRLF終了ファイルに変換するのに役立つユーティリティはありますか?
このユーティリティは、LinuxではなくWindows上で実行する必要があります。私はすでに移動しています。Cygwinを避けることができれば、インストールしたくないです。
回答:
unix2dos
Linuxプラットフォームのユーティリティを使用して変換できます。ありますunix2dos
Windowsのために利用可能なバージョンは、と同様に。
Perlがインストールされている場合は、この1つのライナーも使用できます。
perl -p -e 's/\n/\r\n/' < UNIX_LF.txt > WINDOWS_CRLF.txt
フォルダーを再帰的に調べ、ファイルフィルターを許可し、「\ r \ n」を簡単に検索して「\ n」だけに置き換えるのに最適なのはNotepad ++ですです。
Notepad ++は、Windows用の最高の無料のオープンソースのメモ帳プログラムの1つです。非常にシンプルで強力です。行末の検索/置換をうまく処理しました。請負業者は、\ c \ .hファイルをLinuxの\ r \ n行末でリポジトリにチェックインしますが、ほとんどの人はWindows / Eclipseビルドツールで標準化されているため、ファイルは行末が変換されるまでビルドされません。 。
Edit -> EOL Conversion
変換するファイルの数が少ない場合のシンプルなメニューもあります。
たとえばsfk addcr -dir . -file .txt -norec
、現在のディレクトリのすべての.txtファイルで、LFの末尾をCR / LFに変更しますが、サブディレクトリ内ではありません(再帰なし)。
しかし、このプログラムはそれだけではありません。
-norec
私は、再帰が起こるしたいので、それはそれのように見えるしていません
私はこのソリューションをそこに放り出します。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
次に、編集した後、これらの2行を繰り返します。 .gitattributes
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 ++などの両方の行末を理解するテキストエディターを使用します。
TEXTファイル内のeoln文字を翻訳するには多くの方法があり、誰もがお気に入りです。
しかし、私は常にバイナリモードでLinuxからWindowsにファイルを転送してから、両方のタイプを開き、必要に応じていずれかの形式で保存できるエディターでWindowsでTEXTファイルを開きます。
これにはプログラマーファイルエディターを使用しましたが、Notepad ++でも使用できます。ワードパッドも便利です(少なくとも、LFで終了したファイルを表示する場合)。
Linuxで作成された可能性があり、Windowsの(事実上の標準)の世界で読み取り可能である必要がある単純なテキストファイルを考えています。「unix-touched files」の意味がわかりません。
より多くのオプションを提供するには(私はuser45832のハックの答えを最も楽しんだとしても)
オンラインコンバーター
バッチ/ DOSワンライナー(空行を削除):
FOR /F "eol= delims= usebackq" %a IN (infile.txt) DO (ECHO %a>> outfile.txt)
パワーシェル:
gc infile.txt | %{$_.split("`n")} | Out-File outfile.txt
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
ます。
ウィキペディアでは、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で既に利用可能なツールでもあります。