이 글에서는 리눅스(Linux)에서 파일 하나 또는 여러 개의 파일 이름을 변경하는 두 가지 방법을 소개합니다.
mv와 rename 명령어의 사용법과 함께, 각 상황에서 왜 특정 도구를 사용해야 하는지 자세히 살펴보겠습니다.
mv로 파일 이름 변경하기 – 더 이상 권장되지 않는 방법
웹 디렉터리의 확장자가 어떤 이유로 손상된 상황을 가정해 보겠습니다. 예시로 블로그 파일을 사용하겠습니다.
ping www.linuxscrew.com #먼저 연결 상태를 테스트합니다. wget -m www.linuxscrew.com #웹사이트를 미러링합니다.
이제 웹사이트를 성공적으로 미러링했습니다. 그럼 일부러 문제를 만들어 보겠습니다.
리눅스 셸 – amp 파일들
수많은 ?amp 파일들이 보이네요. 모든 파일이 .html로 잘못 변환되었고, 불필요한 파일까지 섞여 있습니다. 이제 pages 디렉터리로 이동해, 모든 파일을 .html로 변경했던 실수를 고쳐 보겠습니다. 인터넷에서는 "mv *[확장자1] *[확장자2]" 형태의 간단한 명령으로 해결할 수 있다고 알려져 있습니다.
mv 오류 화면
그런데 오류가 발생했습니다. 왜 mv 명령이 기대대로 작동하지 않는 걸까요? 로컬 데스크톱 환경인 Pop!_OS에서 다시 시도해 보겠습니다. 빈 .html 파일 두 개를 .pdf로 변경해 보겠습니다.
mv 오류 화면
역시 같은 오류가 발생합니다. 결국 환경은 계속 변하고, 예전에 쓰던 방식은 더 이상 유효하지 않게 됩니다. 마치 ifconfig가 더 이상 권장되지 않고, 대부분의 사용자가 ip a(주소 확인)나 ip r(라우팅 확인)로 전환해야 하는 것과 같습니다. 도구를 원래 의도와 다른 용도로 사용하면 나중에 문제가 생길 수 있으며, 이 주제에 대해서는 별도의 글에서 다루겠습니다.
따라서 목적에 맞는 도구를 사용하는 것이 올바른 접근입니다. 파일 이름 변경에는 rename이 mv보다 적합합니다. 굳이 mv로 파일 이름을 변경하고 싶다면 단일 파일에 한해 아껴서 사용하세요.
rename으로 여러 파일 한 번에 이름 변경하기
두 도구를 조합하면 강력한 대량 파일 이름 변경도 가능합니다.
find . -depth -type f -name "*?amp" -execdir rename ?amp .html {} \;
각 옵션을 하나씩 살펴보겠습니다.
- -depth: 디렉터리를 탐색하는 동안 하위 항목이 손상되지 않도록 순서를 보장합니다.
- -type f(file): 이번 사용 사례에서는 없어도 무방하지만, 작업의 안정성을 위해 함께 지정하는 것이 좋습니다.
- -name: 찾으려는 패턴을 지정하고, -execdir을 통해 rename 명령으로 전달합니다.
- 여기서는 ?amp 패턴을 찾아 .html로 교체하도록 지정했습니다.
- 마지막 옵션인 {}는 find 명령이 찾아낸 모든 파일로 자동으로 채워집니다.
간단하죠? 물론 조금은 복잡하지만요. 이번에는 좀 더 단순한 rename 사용법을 살펴보겠습니다. 아래와 같은 로그 파일 중 하나의 이름을 변경해 보겠습니다.
로그 파일
단일 파일 이름 변경하기
단일 파일의 이름을 변경할 때는 rename보다 mv를 사용하는 편이 가장 간편합니다.
mv 명령어로 파일 이름 변경하기
이렇게 파일 이름이 성공적으로 변경되었습니다. rename을 사용하고 싶다면 다음과 같이 입력하세요:
rename '' "`date +%Y-%m-%d`"- cloud-init.log
반복 작업의 시간을 줄이고 싶다면 날짜를 변수로 저장해 둘 수도 있습니다.
date="`date +%Y-%m-%d`"
rename을 mv 대신 사용한다고 해서 부담이 크게 늘지 않습니다. 첫 번째 표현식 필터를 빈 값으로 두기만 하면 됩니다.
파일 이름에 날짜 추가하기
파일 이름에 날짜 추가하기
파일 이름 끝에 날짜가 깔끔하게 붙었습니다. 정말 간단하죠?
마무리
파일 이름 변경은 생각보다 간단한 작업입니다. 디렉터리 이름 변경 방법이 궁금하거나, 그 외 일상적인 리눅스 작업 관련 팁이 더 필요하다면 저희 사이트의 다른 아티클도 확인해 보시기 바랍니다.