53

Unix の行末を持つはずのファイルがたくさん (数百) あります。それらのいくつかには Windows の行末があるのではないかと強く疑っています。

私はただ走ることができることを知っています

フリップ-u
またはスクリプトですべてを変換するのと同様のものですが、最初に変更する必要があるファイルを識別できるようにしたいと考えています。

4

7 に答える 7

72

ツールを使用するfileと、行末のタイプがわかります。dos2unix -Uまたは、それが何から始まったかに関係なく、すべてを Unix の行末に変換する which を使用することもできます。

于 2008-09-23T14:40:41.630 に答える
29

grepを使用できます

egrep -l $'\r'\$ *
于 2008-09-23T14:42:27.587 に答える
14

次のようなもの:

perl -p -e 's[\r\n][WIN\n]; s[(?<!WIN)\n][UNIX\n]; s[\r][MAC\n];' FILENAME

ただし、その正規表現の一部は、改良と整理が必要な場合があります。

これにより、各行の末尾に WIN、MAC、または UNIX を含むファイルが出力されます。あなたのファイルがどういうわけかひどい混乱(または差分)であり、エンディングが混在している場合は良い.

于 2010-01-14T15:24:03.480 に答える
5

これが最もフェイルセーフな答えです。Stimms の回答では、サブディレクトリとバイナリ ファイルが考慮されていません

find . -type f -exec file {} \; | grep "CRLF" | awk -F ':' '{ print $1 }'
  • fileファイルの種類を検索するために使用します。CRLF を持つものには、ウィンドウの戻り​​文字があります。の出力はfileで区切られ:、最初のフィールドはファイルのパスです。
于 2016-06-15T21:41:40.733 に答える
2

Unix は 1 バイトの 0x0A (LineFeed) を使用しますが、Windows は 2 バイトの 0x0D 0x0A (キャリッジ リターン、ライン フィード) を使用します。

0x0D が表示されない場合は、Unix である可能性が非常に高くなります。0x0D 0x0A のペアが表示される場合は、MSDOS である可能性が非常に高くなります。

于 2008-09-23T14:42:11.847 に答える
0

Windows の行末 (0x0D 0x0Aまたは\r \n) を持つファイルがわかったら、そのファイルをどうしますか? それらを Unix の行末 (0x0Aまたは\n) に変換すると思います。sed次のコマンドを使用するだけで、ユーティリティを使用して、Windows の行末を含むファイルを Unix の行末に変換できます。

$> sed -i 's/\r//' my_file_with_win_line_endings.txt

次のようにスクリプトに入れることができます。

#!/bin/bash

function travers()
{
    for file in $(ls); do
        if [ -f "${file}" ]; then
            sed -i 's/\r//' "${file}"
        elif [ -d "${file}" ]; then
            cd "${file}"
            travers
            cd ..
        fi
    done
}

travers

ファイルを含むルートディレクトリから実行すると、最終的にすべてのファイルが Unix 行末であることが確認されます。

于 2015-05-09T09:00:39.960 に答える
0

Windowsは行末にchar 13と10を使用し、unixはそのうちの1つだけを使用します(どれを覚えていませんか)。したがって、 char 13 & 10 を char 13 または 10 ( unix を使用するもの) に置き換えることができます。

于 2008-09-23T14:36:53.090 に答える