2008-09-23 6 views
46

나는 Unix 줄 끝을 가지고 있다고 생각되는 파일들을 수백 장 가지고있다. 나는 그 중 일부가 Windows 라인 엔딩을 가지고 있다고 강력히 의심하고 있으며, 어떤 것들이 프로그래밍 방식으로 파악하고 싶습니다.파일의 줄 끝을 결정하는 방법

flip -u
또는 모든 것을 변환하는 스크립트에서 비슷한 것을 실행할 수 있지만 처음 변경해야하는 파일을 식별 할 수 있기를 바랍니다.

답변

28

.

각 줄 끝에 WIN, MAC 또는 UNIX 파일을 출력합니다. 파일이 어떻게 든 끔찍한 혼란 (또는 차이)이 있고 끝이 섞여 있으면 좋습니다.

+0

참고 : 위의 명령은 bash에서 실행해야합니다. – tzot

+3

어떤 이유로 MacOS X 쉘에서이 명령을 실행하면 디렉토리의 모든 파일 목록이 표시됩니다. 심지어 내가 "echo"테스트 "> torderform6.cpp"로 새로 생성 한 것조차도. 어떤 생각이 잘못 될지 모릅니다. –

+7

그냥 우분투에서 나를 위해 폴더에있는 모든 파일을 나열합니다. – rjmunro

0

Windows는 char10을 사용하여 줄 끝 부분을 처리하며 유닉스 중 하나만 사용합니다 (어느 것을 기억하지 못합니다). 따라서 문자 13 & 10을 char 13 또는 10 (유닉스를 사용하는 문자)으로 바꿀 수 있습니다.

64

file 도구를 사용하면 줄 끝 유형을 알 수 있습니다. 또는, 시작 부분에 관계없이 모든 것을 Unix 줄 끝으로 변환하는 dos2unix -U을 사용할 수 있습니다.

+4

파일에 줄 끝이 표시되지 않습니다. 전의. : "파일 .bashrc => .bashrc : ASCII 영어 텍스트"추가 키가 필요합니까? –

+7

@Fedir : 그렇습니다. 파일에 정규 LF 행 끝이 있으면 출력을 인쇄하지 않습니다.그러나 파일에 CRLF, 노출 된 CR 또는 혼합 된 줄 끝이 있으면 그 사실을 알립니다. –

+2

OS X의 CRLF 전용 Perl 스크립트에서 나에게 도움이되지 않았다. GNU 확장이 맞습니까? –

3

유닉스는 0x0A 0x0A (캐리지 리턴, 라인 피드)의 두 바이트를 사용하는 반면, 유닉스는 0x0A (LineFeed) 한 바이트를 사용합니다.

0x0D가 표시되지 않으면 Unix가 될 가능성이 큽니다. 0x0D 0x0A 쌍이 표시되면 MSDOS 가능성이 큽니다. 그 정규 표현식의 일부는 정제 및 청소 장치를해야 할 수도 있지만

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

: 당신은 GREP에게의 라인을 따라

egrep -l $'\r'\$ * 
14

뭔가를 사용할 수

+0

우분투에서 저를 위해 일해 주셨습니다. 받아 들인 대답은 모든 파일을 나열하는 것 같습니다. –

+0

저에게 효과적이지 않습니다. 정규식에서'Unmatched; -h 라인에 -h 라인을 넣으십시오.' – moshen

+0

<을'<' – Joseph

0

어떤 파일에 Windows 줄 끝 (0x0D 0x0A 또는 \r \n)이 있는지 알면 해당 파일로 무엇을 할 것입니까? 나는 supose, 당신은 유닉스 라인 끝 (0x0A 또는 \n)로 그들을 변환합니다.

$> 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 

당신이 루트에서 실행하면 당신은 명령 만 사용 sed 유틸리티 유닉스 라인 엔딩으로 윈도우 라인 엔딩 파일을 변환 할 수 있습니다 모든 파일이 유닉스 라인 엔딩인지 확인하게 될 것입니다.

4

가장 안전한 응답입니다. 파일 형식을 찾을 하위 디렉토리와 바이너리 파일

find . -type f -exec file {} \; | grep "CRLF" | awk -F ':' '{ print $1 }' 
  • 사용 file에 대한 아무튼 계정에 대답 Stimms. CRLF를 사용하는 사람에게는 Windows 반환 문자가 있습니다. file의 출력은 :으로 구분되며 첫 번째 필드는 파일의 경로입니다.
+0

실제로 가장 안전한 방법입니다. 발견 된 모든 파일 만 변환하려면'find를 실행하십시오. -t f -exec file {} \; | grep "CRLF"| awk -F ':' '{print $ 1}'| xargs flip -ub' 이후에. – pixelbrackets

+2

대부분의 안전 장치는 그렇지 않습니다.'file'은 파일의 종류에 따라 출력에서 ​​항상 "CRLF"를 말하는 것이 아닙니다. SVG 파일 (텍스트를 평문 파일처럼 포함하고 있음)에서'file'은 사용 된 라인 끝의 종류를 언급하지 않는다는 것을 발견했습니다. 따라서이 스크립트는 파일 유형에 무관하지 않습니다. 그냥 말해. 그렇지 않으면 정성을 다하는 한 줄짜리처럼 보입니다. – amn

관련 문제