2012-05-17 10 views
8

ディレクトリとサブディレクトリ内のすべてのファイルのEOL(dos-> unix)を再帰的にdos2unix? (私はそれを持っていないし、それをインストールすることはできません)ディレクトリとサブディレクトリ内のすべてのファイルのすべてのEOL(dos-> unix)をdos2unixなしで再帰的に変換する

tr -d '\r'とパイプを使用して行う方法はありますか?もしそうなら、どうですか?

答えて

7

インプレースのファイルを変更するのsedの-iフラグを使用することができます。

find . -type f -exec sed -i 's/\x0d//g' {} \+ 

私があなただったら、私は運転は大丈夫行ったことを確認するために周りのファイルを続けるだろう。その後、一時ファイルを削除することができます。これは次のようにすることができます:

find . -type f -exec sed -i'.OLD' 's/\x0d//g' {} \+ 
find . -type f -name '*.OLD' -delete 
+0

これは、空白を含むファイル名を処理する必要があります。各行の末尾に改行を追加しないと、ファイルは二重スペースになります(キャリッジリターンを改行で置き換えるため)。はい、私はそれをテストしました。 –

+0

@DennisWilliamson私はオフィスで2度も考えなくてもスクリプトからそれを取り除いただけです。今、私はこれらのスクリプトがどのように動作するのだろうかと思っています。 (Mac用のMicrosoft Officeで作成されたファイルを変換することを意図していたことが関係している可能性があります)。新しいバージョンが正しく動作するはずです。 –

2

空白などを含まないファイル名とディレクトリ名がありますか?

もしそうなら、それほど難しくありません。改行や空白などを含む任意の名前に対処する必要がある場合は、これ以上の作業が必要です。

tmp=${TMPDIR:-/tmp}/crlf.$$ 
trap "rm -f $tmp.?; exit 1" 0 1 2 3 13 15 

find . -type f -print | 
while read name 
do 
    tr -d '\015' < $name > $tmp.1 
    mv $tmp.1 $name 
done 

rm -f $tmp.? 
trap 0 
exit 0 

トラップの内容は、一時ファイルが残っていないことを保証します。あなたが引っ張ることができる他のトリック、あなたの一時的なファイル名のためのよりランダムな名前。敵対的な環境で働かない限り、通常は必要ありません。あなたはPerlのワンライナーでそれを行うことができ、現在のディレクトリ内のすべてのファイルについては

+0

'tr'は実際に' \ r'(BSDとGNUの両方の亜種)を認識するので、 'tr -d '\ r"を使うことができます。 –

11

perl -pi -e 's/\r\n/\n/g' *hereから盗まれた)

EDIT

find | xargs perl -pi -e 's/\r\n/\n/g' 
:そして、小さな変更であなたはサブディレクトリ再帰を行うことができます
+2

'find'と' xargs'がそれをサポートしているなら、 'find -print0 | xargs -0 ... 'は空白を含むファイル名を扱います。 –

+3

* Git *リポジトリでこのコマンドを使用するかどうか注意してください。 '.git'サブディレクトリをfindから除外します。 – prajmus

1

エディタをバッチモードで使用することもできます。

find . -type f -exec bash -c 'echo -ne "%s/\\\r//\nx\n" | ex "{}" ' \; 
+0

このソリューションはMac OS Xで私にとっては唯一のものでした。他の人たちは 'Can not do inplace edit:./langは普通のファイルではありません、<>行22167. – WilliamKF

0

\rは(ティムPoteののファイルに多分場合)\n続いていない場合:

  • は(tr -dを使用して)\rを削除\n\rを交換改行
  • を除去することができるではないかもしれませんダブル/トリプル改行を引き起こす

たぶんティムポテは、彼が言及したファイルについて上記の点を検証するかもしれない。

+0

私はTim Poteの答えに良いコメントをしていますが、質問に実際にどのように答えているかはあまり明確ではありません。 –