파일을 수정하지 않고 파일이 CRLF 또는 LF를 사용하는지 테스트하려면 어떻게 해야 합니까?

파일을 수정하지 않고 파일이 CRLF 또는 LF를 사용하는지 테스트하려면 어떻게 해야 합니까?

특정 내용을 확인하려면 주기적으로 명령을 실행해야 합니다.텍스트파일은 Linux 모드로 저장됩니다. 불행하게도 dos2unix파일은 항상 수정되어 파일 및 폴더 타임스탬프가 엉망이 되고 불필요한 쓰기가 발생합니다.

제가 작성한 스크립트는 Bash에 있으므로 Bash 기반 답변을 선호합니다.

답변1

참고: 이는 빠른 확인을 위해서만 자동화 스크립트에 사용되어서는 안 됩니다. 자동화 스크립트의 경우 다른 답변을 확인하는 것이 좋습니다.

사용cat -A

$ cat file
hello
hello

이제 이 파일이 *NIX 시스템에서 생성된 경우 다음이 표시됩니다.

$ cat -A file
hello$
hello$

하지만 이 파일이 Windows에서 만들어지면 다음과 같이 표시됩니다.

$ cat -A file
hello^M$
hello

^M대표 CR하고 $대표합니다 LF.

저는 Windows에서는 Windows 메모장을 사용하고 Linux에서는 Vim을 사용합니다. Windows 메모장은 마지막 줄을 저장하지 않습니다 CRLF.

또한 파일 내용은 변경되지 않습니다.

답변2

dos2unix이를 필터 로 사용하고 출력을 원본 파일과 비교할 수 있습니다 .

dos2unix < myfile.txt | cmp - myfile.txt

답변3

타임스탬프에 영향을 주지 않는 것이 목표인 경우 타임스탬프를 동일하게 유지하는 또는 옵션이 dos2unix있습니다 . 임시 파일을 생성하고 이름을 바꾸려면 쓰기 작업을 수행해야 하지만 타임스탬프는 영향을 받지 않습니다.-k--keepdate

파일 수정이 허용되지 않는 경우 다음 해결 방법을 사용할 수 있습니다.이 답변.

find . -not -type d -exec file "{}" ";" | grep CRLF

이러한 라인 종료가 감지되면 이 file명령이 출력됩니다 .CRLF

답변4

grepCRLF 코드인 8진수를 사용해 볼 수 있습니다 .

grep -U $'\015' myfile.txt

또는 16진수:

grep -U $'\x0D' myfile.txt

관련 정보