ディレクトリとサブディレクトリ内のすべてのファイルのEOL(dos-> unix)を再帰的にdos2unix
? (私はそれを持っていないし、それをインストールすることはできません)ディレクトリとサブディレクトリ内のすべてのファイルのすべてのEOL(dos-> unix)をdos2unixなしで再帰的に変換する
tr -d '\r'
とパイプを使用して行う方法はありますか?もしそうなら、どうですか?
ディレクトリとサブディレクトリ内のすべてのファイルのEOL(dos-> unix)を再帰的にdos2unix
? (私はそれを持っていないし、それをインストールすることはできません)ディレクトリとサブディレクトリ内のすべてのファイルのすべてのEOL(dos-> unix)をdos2unixなしで再帰的に変換する
tr -d '\r'
とパイプを使用して行う方法はありますか?もしそうなら、どうですか?
インプレースのファイルを変更するの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
空白などを含まないファイル名とディレクトリ名がありますか?
もしそうなら、それほど難しくありません。改行や空白などを含む任意の名前に対処する必要がある場合は、これ以上の作業が必要です。
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のワンライナーでそれを行うことができ、現在のディレクトリ内のすべてのファイルについては
'tr'は実際に' \ r'(BSDとGNUの両方の亜種)を認識するので、 'tr -d '\ r"を使うことができます。 –
エディタをバッチモードで使用することもできます。
find . -type f -exec bash -c 'echo -ne "%s/\\\r//\nx\n" | ex "{}" ' \;
このソリューションはMac OS Xで私にとっては唯一のものでした。他の人たちは 'Can not do inplace edit:./langは普通のファイルではありません、<>行22167. – WilliamKF
\r
は(ティムPoteののファイルに多分場合)\n
続いていない場合:
tr -d
を使用して)\r
を削除\n
と\r
を交換改行たぶんティムポテは、彼が言及したファイルについて上記の点を検証するかもしれない。
私はTim Poteの答えに良いコメントをしていますが、質問に実際にどのように答えているかはあまり明確ではありません。 –
これは、空白を含むファイル名を処理する必要があります。各行の末尾に改行を追加しないと、ファイルは二重スペースになります(キャリッジリターンを改行で置き換えるため)。はい、私はそれをテストしました。 –
@DennisWilliamson私はオフィスで2度も考えなくてもスクリプトからそれを取り除いただけです。今、私はこれらのスクリプトがどのように動作するのだろうかと思っています。 (Mac用のMicrosoft Officeで作成されたファイルを変換することを意図していたことが関係している可能性があります)。新しいバージョンが正しく動作するはずです。 –