2019-04-11 16:20:16

왜 matlab을 이용해서 파일을 복사하려고 하는지 묻는 사람이 있을 것 같다. 간단히 ctrl+c와 ctrl+v로 할 수 있지 않냐고. 맞다. 그것이 가장 간단한 방법이다. 하지만 여러 개의 파일을 복사하는데 만약 각 파일의 이름을 원하는 이름으로 바꾸면서 복사하고 싶다면 어떻게 해야할까? ctrl+c, ctrl+v로 할 수 있지만, 굉장히 번거로운 작업이 될 수 있다. 

 

ex1.txt, ex2.txt,..., ex1000.txt와 같이 1000개의 메모장 파일이 있다고 가정해보자. 그런데 어떤 필요에 따라서 이름을 test1.txt, test2.txt,...,test1000.txt와 같이 변경해줘야 한다면? 

 

복사붙여넣기로 이 작업을 수행한다면 아마도 1시간이 넘게 걸릴 것이다. 난 그렇게 단순노동을 반복하고 싶지 않다. copyfile 함수를 이용하면 쉽게 해결할 수 있다.

 

copyfile 함수 사용법

우선 단 하나의 메모장 파일을 복사하면서 이름을 바꿔주는 코드를 짜보자. 

clc, clear, close all

copyfile('ex1.txt', 'test1.txt'); % ex1.txt를 복사하는데 이름은 test1.txt로 변경해줘. 

ex1.txt 파일을 복사하면서 이름은 test1.txt이 되게 했다. 제대로 파일이 복사되었는지 확인해보자. 우선 같은 폴더에 test1.txt이 생성된 것을 확인할 수 있다. 

 

그렇다면 내용이 잘 복사되었는지 확인해보자. 

 

원하는 대로 잘 복사되었다. 

 

그럼 이번에는 1000개의 메모장 파일을 복사하면서 이름을 바꿔주는 코드를 짜보자. 

clc, clear, close all

for i = 1:1000
    copyfile(['ex', num2str(i), '.txt'], ['test', num2str(i), '.txt']); 
end
 

for문을 이용해서 1000번을 반복한다. num2str이라는 함수를 사용했는데 이 함수는 숫자를 문자로 바꿔주는 함수다. 따라서 i=1일때, ['ex', num2str(i), '.txt'] = ['ex', num2str(1), '.txt'] = ['ex', '1', '.txt'] = 'ex1.txt'가 된다. 결국 i=1일때는 copyfile('ex1.txt', 'test1.txt')이 되고, i=2일때 copyfile('ex2.txt', 'test2.txt')이 되고, i=1000일때는 copyfile('ex1000.txt', 'test1000.txt')이 된다.

 

이처럼 단 몇줄의 코드로 매우 귀찮을 수 있는 단순노동을 모면할 수 있다. 이것이 코딩의 묘미 아니겠는가?