나는 Unix 줄 끝을 가지고 있다고 생각되는 파일들을 수백 장 가지고있다. 나는 그 중 일부가 Windows 라인 엔딩을 가지고 있다고 강력히 의심하고 있으며, 어떤 것들이 프로그래밍 방식으로 파악하고 싶습니다.파일의 줄 끝을 결정하는 방법
flip -u또는 모든 것을 변환하는 스크립트에서 비슷한 것을 실행할 수 있지만 처음 변경해야하는 파일을 식별 할 수 있기를 바랍니다.
나는 Unix 줄 끝을 가지고 있다고 생각되는 파일들을 수백 장 가지고있다. 나는 그 중 일부가 Windows 라인 엔딩을 가지고 있다고 강력히 의심하고 있으며, 어떤 것들이 프로그래밍 방식으로 파악하고 싶습니다.파일의 줄 끝을 결정하는 방법
flip -u또는 모든 것을 변환하는 스크립트에서 비슷한 것을 실행할 수 있지만 처음 변경해야하는 파일을 식별 할 수 있기를 바랍니다.
.
각 줄 끝에 WIN, MAC 또는 UNIX 파일을 출력합니다. 파일이 어떻게 든 끔찍한 혼란 (또는 차이)이 있고 끝이 섞여 있으면 좋습니다.
Windows는 char10을 사용하여 줄 끝 부분을 처리하며 유닉스 중 하나만 사용합니다 (어느 것을 기억하지 못합니다). 따라서 문자 13 & 10을 char 13 또는 10 (유닉스를 사용하는 문자)으로 바꿀 수 있습니다.
file
도구를 사용하면 줄 끝 유형을 알 수 있습니다. 또는, 시작 부분에 관계없이 모든 것을 Unix 줄 끝으로 변환하는 dos2unix -U
을 사용할 수 있습니다.
파일에 줄 끝이 표시되지 않습니다. 전의. : "파일 .bashrc => .bashrc : ASCII 영어 텍스트"추가 키가 필요합니까? –
@Fedir : 그렇습니다. 파일에 정규 LF 행 끝이 있으면 출력을 인쇄하지 않습니다.그러나 파일에 CRLF, 노출 된 CR 또는 혼합 된 줄 끝이 있으면 그 사실을 알립니다. –
OS X의 CRLF 전용 Perl 스크립트에서 나에게 도움이되지 않았다. GNU 확장이 맞습니까? –
유닉스는 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'\$ *
어떤 파일에 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
유틸리티 유닉스 라인 엔딩으로 윈도우 라인 엔딩 파일을 변환 할 수 있습니다 모든 파일이 유닉스 라인 엔딩인지 확인하게 될 것입니다.
가장 안전한 응답입니다. 파일 형식을 찾을 하위 디렉토리와 바이너리 파일
find . -type f -exec file {} \; | grep "CRLF" | awk -F ':' '{ print $1 }'
file
에 대한 아무튼 계정에 대답 Stimms. CRLF를 사용하는 사람에게는 Windows 반환 문자가 있습니다. file
의 출력은 :
으로 구분되며 첫 번째 필드는 파일의 경로입니다.실제로 가장 안전한 방법입니다. 발견 된 모든 파일 만 변환하려면'find를 실행하십시오. -t f -exec file {} \; | grep "CRLF"| awk -F ':' '{print $ 1}'| xargs flip -ub' 이후에. – pixelbrackets
대부분의 안전 장치는 그렇지 않습니다.'file'은 파일의 종류에 따라 출력에서 항상 "CRLF"를 말하는 것이 아닙니다. SVG 파일 (텍스트를 평문 파일처럼 포함하고 있음)에서'file'은 사용 된 라인 끝의 종류를 언급하지 않는다는 것을 발견했습니다. 따라서이 스크립트는 파일 유형에 무관하지 않습니다. 그냥 말해. 그렇지 않으면 정성을 다하는 한 줄짜리처럼 보입니다. – amn
참고 : 위의 명령은 bash에서 실행해야합니다. – tzot
어떤 이유로 MacOS X 쉘에서이 명령을 실행하면 디렉토리의 모든 파일 목록이 표시됩니다. 심지어 내가 "echo"테스트 "> torderform6.cpp"로 새로 생성 한 것조차도. 어떤 생각이 잘못 될지 모릅니다. –
그냥 우분투에서 나를 위해 폴더에있는 모든 파일을 나열합니다. – rjmunro