모든 파일에서 개행 문자(^M)를 교체한 후 문자열을 기준으로 파일 이름을 바꿉니다.

모든 파일에서 개행 문자(^M)를 교체한 후 문자열을 기준으로 파일 이름을 바꿉니다.

저는 UNIX 매니아는 아니지만 여기 저기 작은 스크립트를 작성할 만큼 UNIX를 잘 이해하고 있습니다. 다만 이 부분은 개인적으로 시간을 충분히 할애하지 못할 수도 있습니다.

내 디렉토리에 약 2000개의 파일이 있으며 다음을 수행해야 합니다.

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

답변1

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

파일이 모두 디렉터리에 있는 경우 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

관련 정보