서버의 있는 특정 경로에 있는 파일을 삭제해야 하는 상황.
■ 특정 파일 삭제 스크립트
[root@localhost ~]# ./destoryfile.sh
#!/bin/sh
YMD_BASIC=`date +%Y%m%d`
YMD_HMS_BASIC=`date +%Y%m%d_%H%M%S`
{
echo file delete start $YMD_HMS_BASIC
#sed -i 's/^M//g' /backup/pds/deletefile/destoryfile_202007221717.txt
INPUTFILE=/backup/pds/deletefile/destoryfile_202007221717.txt
while read line
do
echo /backup$line rm -rf /backup$line
done < "$INPUTFILE"
YMD_BASIC_END=`date +%Y%m%d_%H%M%S`
echo file delete end $YMD_BASIC_END
} > /backup/pds/deletefile/deletefile$YMD_BASIC.log
위 쉘 스크립트를 실행 했는데 파일이 삭제가 되지 않았다.
실행 로그 파일을 확인해 보았다.
^M 이거 뭐지? 아.. 저거 때문에 경로를 찾지 못했구만.
그럼 저게 뭘까?
■ ^M 발생 원인
윈도우에서 작성한 파일을 Unix/Linux상에 올리면 개행 문자가 깨져서 ^M가 보이는 경우가 있다.
이것은 윈도우에서는 CRLF 가 개행인데 Linux/Unix에서는 LF가 개행이라 나타나는 현상으로 보면 된다.
[CR,LF 뜻]
라인피드(LF : Line Feed) => 현재 위치에서 바로 아래로 이동
캐리지리턴(CR: Carriage return) => 커서의 위치를 앞으로 이동
나도 삭제할 경로가 적인 파일을 window에서 생성 한 후 리눅스로 옮겼다. 그랬더니 저래 된거란다.
그럼 삭제 해주면 되지 않겠나. 별거 아니네 모
와.. 이거 뭐라고 삽질 졸라 했다......
우선 경로가 적인 원본 파일을 확인해 봤다.
뭐지??. 개행 문자가 없다. 흠.. 그래 모 내눈에만 안보이는거고 있다고 생각했다.
그래서 삭제하는 방법을 검색하기 시작했다.
삭제하는 방법은 참 많다.. 내가 하면 안될 뿐이지.. 쓰..ㅂ..
■ 명령어로 개행 문자 (^M) 삭제하기
- vi, vim 으로 열어서 직접 제거하기
- ^M 은 그냥 타이핑 하는게 아니라 Ctril + v + m 으로 만들어줘야 한다. 손 띠면 안된다.
$ vim 변경할 파일
# 파일 오픈 후 아래 명령어 입력해 주면 된다.
:%s/^M//g
1차실패..
- tr 명령어 사용
$ tr -d '^M' < 변경할파일명 > 생성할파일명
ㅋㅋ 2차 실패
- sed 명령어 사용
$ sed -i 's/^M//g' 변경할파일명
i : 변경된 내용 현재파일에 저장
후.... 3차 실패..
- tr 명령어 재시도
$ tr -d '\015' < 변경할파일명 > 새로생성할파일명
오 됐다....~!!!!! \015 요걸로 하니까 된다.
- sed 명령어로 시도해봄
$ sed -i 's/\015//g' 변경할파일명
ㅋㅋㅋ 실패..
vi, vim으로 재 시도.. 하기전에
하나의 사실을 알았음. cat 으로 파일 확인 할 때 옵션을 주니까 파일내용에 ^M이 표시되었다.
$ cat -v 변경할파일명 | head -10
나온다.. 자 그럼 vim 에서도 나오게 할 수 있겠지? 왜 vim에서도 나오게 하려 하냐고? 치환 해주고 싶었음. ㅋㅋ
※ cat 옵션
-b: 줄번호를 화면 왼쪽에 나타낸다. 비어있는 행은 제외한다. -e: 제어 문자를 ^ 형태로 출력하면서 각 행의 끝에 $를 추가한다. -n: 줄번호를 화면 왼쪽에 나타낸다. 비어있는 행도 포함한다. -s: 연속되는 2개이상의 빈 행을 한행으로 출력한다. -v: tab과 행 바꿈 문자를 제외한 제어 문자를 ^ 형태로 출력한다. -E: 행마다 끝에 $ 문자를 출력한다. -T: 탭(tab) 문자를 출력한다. -A: -vET 옵션을 사용한 것과 같은 효과를 본다. |
■ VIM 으로 열어서 개행 문자 (^M) 삭제하기
- vi, vim으로 오픈
- -b 옵션을 붙여 바이너리 모드로 진입했다.
$ vim -b 변경할파일명
- ^M 삭제
- ^M 은 그냥 타이핑 하는게 아니라 Ctril + v + m 으로 만들어줘야 한다. 손 띠면 안된다.
$ vim 변경할 파일
# 파일 오픈 후 vi 편집기 안에서 아래 문자 입력해 주면 된다.
:%s/^M//g
ㅠㅠ 변경됐다... ㅠㅠ
- 스크립트 재실행
$ ./destoryfile.sh
결국 성공!! 인생 뭐 있나
■ 프로세스 죽이기
#!/bin/bash
ps -ef | grep $1 | awk '{print $2}' | xargs kill -9 {}
'리눅스' 카테고리의 다른 글
[리눅스] 파티션 용량(df)이 실제 용량과 다른경우 (0) | 2020.08.06 |
---|---|
[리눅스] CentOS 7,8 rsync 사용기 (0) | 2020.08.06 |
[리눅스] 압축, 해제(tar, gzip gz, bzip2 bz2, xz) (0) | 2020.08.05 |
[리눅스] Centos 7 이하 NFS(Network File System) 설정하기 (0) | 2020.08.04 |
[리눅스]쉘 스크립트 정복하기 (0) | 2020.07.30 |