모든 파일에서 새 줄 문자(^M)를 바꾼 다음 문자 문자열을 기반으로 파일 이름을 바꿉니다.

모든 파일에서 새 줄 문자(^M)를 바꾼 다음 문자 문자열을 기반으로 파일 이름을 바꿉니다.

나는 UNIX 사용자는 아니지만 개인적으로 충분한 시간을 할애할 수 없는 이 스크립트를 제외하고 여기저기서 작은 스크립트를 작성하는 데는 충분히 이해하고 있습니다.

다음 작업을 수행해야 하는 디렉터리에 약 2000개의 파일이 있습니다.

  1. 각 파일에는 약 3000개의 레코드가 있지만 모두 Ctrl M 개행 문자로 구분된 각 파일의 한 줄에 있습니다. 이것들은 분리되어야 합니다.
  2. 각 파일에는 8번째 문자부터 14번째 문자까지 시작하는 첫 번째 줄에 생성된 해당 날짜가 있습니다. 이 날짜는 파일 이름을 XXX_YYYYMMDD_AAA.txt로 바꾸는 데 사용해야 합니다.

답변1

dos2unix대부분의 시스템에는 이 작업을 수행하는 데 필요한 파일을 처리하기 위해 스크립트에서 "시작"할 수 있는 도구가 포함되어 있습니다 .

파일이 모두 디렉토리에 있으면 find해당 파일을 찾은 다음 다음과 같이 각 파일을 개별적으로 작업할 수 있습니다.

$ find . -type f -exec dos2unix {} +

이 디렉터리 구조가 있다고 가정해 보겠습니다.

$ tree
.
|-- afile
|-- dir1
|   `-- afile
`-- dir2
    `-- afile

우리는 우리의 find기술을 사용하여 모든 파일이 CRLF 줄 종료가 있는 "DOS" 파일인지 확인할 수 있습니다.

$ find . -type f -exec file {} +
./dir2/afile: ASCII text, with CRLF line terminators
./afile:      ASCII text, with CRLF line terminators
./dir1/afile: ASCII text, with CRLF line terminators

그리고 다음과 같이 모든 것을 수리하십시오.

$ find . -type f -exec dos2unix {} +
dos2unix: converting file ./dir2/afile to Unix format ...
dos2unix: converting file ./afile to Unix format ...
dos2unix: converting file ./dir1/afile to Unix format ...

결과적으로 Unix 파일만 생성되었습니다.

$ find . -type f -exec file {} +
./dir2/afile: ASCII text
./afile:      ASCII text
./dir1/afile: ASCII text

관련 정보