imhamburger 님의 블로그

리눅스(Linux) - 특정 파일 내용을 여러 파일에 복사하기, 파일명이 -l 파일 삭제하기 본문

리눅스(Linux)

리눅스(Linux) - 특정 파일 내용을 여러 파일에 복사하기, 파일명이 -l 파일 삭제하기

imhamburger 2024. 7. 22. 18:42

1. 특정 파일 내용을 여러 파일에 복사하기

특정 파일 안에 있는 내용을 복사하여 여러 파일 안에 복사하고 싶었다. 하나씩 해도되지만 그건 너무 비효율적이라 생각했다.

아래 history.log 중 바이트가 0인 파일들은 빈 파일이다. 빈 파일 안에 다른 채워져있는 파일 하나를 골라 넣어보고자 한다. 

 

아래 코드를 사용하면 된다.

cat {채워져있는 파일명} | tee {빈파일명1} {빈파일명2} {빈파일명3}

cat은 '내용을 보겠다.'라는 명령어이고,

tee는 표준 입력에서 읽은 내용을 표준 출력에도 사용하면서 파일에 저장하는 두가지를 동시에 사용하는 명령어이다.

 

이 말이 살짝 이해가 안가는데 예시로 살펴보자!

 

1-1. 표준 출력을 이용한 사용 

echo {출력내용} | tee {파일이름}

 

위의 코드를 터미널에 똑같이 써보자.

 

'ham'이라는게 출력된 것을 볼 수 있다. 그리고 파일 리스트를 살펴보면 burger 라는 파일이 만들어져있다.

 

vi burger를 해보면,

'ham' 입력되어 있다.

 

1-2. EOF 표준입력을 이용

tee {파일명} << EOF
> 내용1
> 내용2
> 내용3
....
> EOF

EOF는 End Of File의 약자이며 EOF 사이에 적은 내용을 입력받아 명령을 수행한다. 사용 시작(EOF)을 알리고 끝날 때도 동일하게 EOF를 입력해야 종료된다.

 

예시로 보자면, burger라는 파일에 ham / bacon / onion 을 입력 후 종료하였다.

 

그리고 cat 을 통해 burger 파일의 내용을 보면, 입력한 내용이 저장된 것을 볼 수 있다. 

 

따라서, tee는 표준 입력에서 읽은 내용을 표준 출력에도 사용하면서 파일에 저장하는 두가지를 동시에 사용하는 명령어이다.

 

보통 tee는 동일한 내용을 여러 개에 복사하고 싶을 때 많이 사용된다.

cat {채워져있는 파일명} | tee - a {파일명1} {파일명2} {파일명3}

-a 옵션을 사용하면 덮어쓰기가 아닌 이어쓰기가 된다. 만약, 파일 안에 있는 내용을 없애지않고 아래 이어서 쓰고싶다면 -a 를 꼭 붙여줘야 한다.

 

 

2. 파일명이 -l 인 파일 삭제하기

터미널로 뭘좀 하다가 -l 이라는 파일이 생겨버렸다!

 

그냥 rm로 삭제하면 되겠지 했는데... 계속 에러가 났다..

그래도 친절하게도 에러메세지를 읽어보니 해결 방법을 알려줬다.

 

분리할라면 '--'을 사용하라해서 사용해보았다. 

 

그랬더니 에러없이 잘 삭제되었다.

다른 파일명이라도 '-'가 있어 계속 에러가 난다면 '--'을 이용해서 삭제하면 된다.