리눅스 명령어 basename은 파일 경로나 디렉터리 경로에서 파일명만 추출해야 하는 경우에 유용하게 사용할 수 있는 명령어입니다. 이 명령어는 경로에서 마지막 요소를 제거하고 순수한 파일명만을 반환하는 역할을 합니다. 간단해 보일 수 있지만, basename
을 적절히 활용하면 스크립트 작성이나 파일 관리에서 매우 효율적으로 사용할 수 있습니다.
목차
리눅스 명령어 basename이란?
basename
은 경로에서 마지막 요소를 가져오는 리눅스 명령어입니다. 예를 들어, /home/user/example.txt
라는 경로가 있을 때 basename
명령어를 사용하면 example.txt
라는 파일명만 반환됩니다. 주로 파일 경로가 길거나 경로 안에 파일명이 포함되어 있는 경우, 이를 쉽게 추출할 때 사용됩니다.
위와 같은 형식으로 사용할 수 있으며, 경로를 인수로 제공하면 경로에서 마지막 파일명을 추출하는 기능을 합니다. 애써서 경로명을 파싱해서 파일명을 구해내는 스크립트를 별도로 작성할 필요가 없이, basename 명령어만 활용하면 간편하게 파일이름을 얻을 수 있습니다.
basename 기본 사용법
리눅스 명령어 basename
의 기본적인 사용법은 매우 간단하며, 다음과 같습니다. basename 명령어 뒤에 파일의 경로를 적어주면 파일이름을 추출해서 반환합니다.
basename /usr/bin/filename
ShellScript여기서는 /usr/bin/filename
에서 filename
만 추출합니다. 이처럼 파일명만 필요할 때 간단히 사용할 수 있습니다.
유용한 옵션들
basename
은 몇 가지 유용한 옵션을 제공합니다. 이러한 옵션들을 잘 활용하면 더 많은 상황에서 유용하게 사용할 수 있습니다.
-a, –multiple 옵션
이 옵션은 여러 개의 파일 경로를 한 번에 처리할 수 있도록 해줍니다. 여러 파일이나 경로를 처리할 때 일일이 명령어를 실행하지 않고 한 번에 처리할 수 있어 유용합니다.
basename -a /path/to/file1 /path/to/file2
ShellScript아래는 basename 명령어와 함께 -a 옵션을 사용해서 /usr/bin 하위의 ls와 mv를 추출하도록 한 결과입니다.
-s, –suffix 옵션
파일명을 추출할 때 파일의 확장자까지 함께 추출될 경우, 확장자를 제외한 순수 파일명만을 얻고 싶을 때가 있습니다. 이 옵션은 파일명에서 지정된 접미사(확장자)를 제거하는 데 사용됩니다.
basename -s .txt /usr/local/bin/file.txt
ShellScript아래의 결과와 같이 .txt 확장자가 제거되고 example만 반환된 것을 확인할 수 있습니다.
또 다른 방식의 확장자 제거
-s 옵션을 사용하지 않고도 확장자를 제거할 수 있는 방법이 있습니다. 경로와 함께 확장자를 마지막 인자로 넘겨주면 확장자 부분을 제거할 수 있습니다.
basename /home/ito/example.txt .txt
ShellScript위 명령어는 .txt
확장자를 제거하고 example
만 반환하는 예시입니다. 이처럼 확장자까지 함께 지정하면 필요 없는 부분을 쉽게 제거할 수 있어 편리합니다. 확장자를 제거하는 스크립트를 별도로 작성하지 않고 손쉽게 파일이름만 얻을 수 있습니다.
-z, –zero 옵션
basename
에서 -z
옵션은 결과 값의 끝에 개행 문자 대신 NULL 문자를 추가하는 역할을 합니다. 기본적으로 basename
은 파일명을 추출한 후 출력할 때 개행 문자(\n
)를 추가해 다음 출력과 구분합니다. 그러나 -z
옵션을 사용하면 NULL 문자(\0
)를 추가하여 여러 파일명을 처리할 때 공백이나 개행 문자로 인한 혼동을 줄일 수 있습니다.
이 옵션은 주로 스크립트에서 여러 파일명을 처리할 때, 특히 파일명에 공백이 포함된 경우 유용하게 사용할 수 있습니다. NULL 문자는 파일명 끝을 정확하게 구분하기 때문에, 각 파일명을 명확하게 구분할 수 있습니다.
위와 같이 example.txt 바로 뒤에 개행 문자가 오지 않고 NULL 문자(\0)가 오는 것을 알 수 있습니다.
basename 사용 시 주의사항
basename
은 간단한 명령어이지만, 파일 경로 처리에서 몇 가지 주의해야 할 점이 있습니다.
- 경로 형식에 유의: 경로가 잘못 지정되거나 파일명이 아닌 디렉터리 경로가 포함되면 의도한 대로 결과가 반환되지 않을 수 있습니다. 경로는 항상 파일명까지 포함된 정확한 경로를 입력해야 합니다.
- 확장자 지정 주의: 확장자를 제거하려면 반드시 해당 파일의 확장자를 정확하게 지정해야 합니다. 예를 들어,
.txt
를 제거하려는데 확장자가.text
라면 파일명을 제대로 추출하지 못할 수 있습니다.
정리
basename
은 리눅스에서 경로나 파일 처리 작업을 할 때 매우 유용한 명령어입니다. 파일 경로에서 파일명만 필요할 때 사용하며, 확장자를 제거하거나 여러 경로를 한 번에 처리할 수도 있어 효율적인 작업이 가능합니다. 특히, 스크립트 작성이나 자동화 작업에서 파일명만 추출해야 하는 경우에 꼭 필요한 명령어입니다. 여러 옵션을 잘 활용해 본인의 상황에 맞는 최적의 사용법을 찾아 적용해 보세요.