ディレクトリとサブディレクトリ内のすべてのファイルのすべての EOL (dos->unix) を再帰的に変換するにはどうすればよいです dos2unix
か? (持ってなくてインストールできません。)
tr -d '\r'
とパイプを使用してそれを行う方法はありますか? もしそうなら、どのように?
ディレクトリとサブディレクトリ内のすべてのファイルのすべての EOL (dos->unix) を再帰的に変換するにはどうすればよいです dos2unix
か? (持ってなくてインストールできません。)
tr -d '\r'
とパイプを使用してそれを行う方法はありますか? もしそうなら、どのように?
現在のディレクトリ内のすべてのファイルに対して、Perl ワンライナーで実行できます: (ここperl -pi -e 's/\r\n/\n/g' *
から盗まれました)
編集:そして、小さな変更を加えることで、サブディレクトリの再帰を行うことができます:
find | xargs perl -pi -e 's/\r\n/\n/g'
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
トラップ機能により、一時ファイルが残されないことが保証されます。一時ファイル名にもっとランダムな名前を付けて、プルできる他のトリックがあります。敵対的な環境で作業しない限り、通常は必要ありません。
エディターをバッチ モードで使用することもできます。
find . -type f -exec bash -c 'echo -ne "%s/\\\r//\nx\n" | ex "{}" ' \;
\r
が続いていない場合\n
(おそらく Tim Pote のファイルの場合):
\r
(を使用tr -d
) すると、改行が削除される場合があります\r
と\n
、二重/三重の改行が発生しない場合がありますTim Pote は、彼が言及したファイルについて上記の点を検証できるかもしれません。