본문 바로가기

별걸다하는 IT/리눅스 유닉스

[리눅스/유닉스] basename, dirname 파일명만 추출하기, 파일경로 추출하기, 확장자 제거

반응형

[리눅스/유닉스 완전 정복 목차]

안녕하세요 양햄찌 블로그 주인장입니다.

오늘은 오랜만에 리눅스유닉스 포스팅으로 돌아왔어요~~

 

컴파일을 대량으로 해야할 일이 생겼는데 일일이 컴파일 하기 귀찮아서..

대량으로 컴파일해주는 스크립트를 짜다가, 문득 오 이거 포스팅해야겠다 싶었답니당 ㅋㅋ

basename과 dirname

오늘 알아볼 명령어는, basename과 dirname입니다.

dir은 디렉터리의 약자로, 파일명을 제거하고 경로만 추출하고 싶을 때

base는 베이스! 토대가 되는 이름으로, 경로를 제외하고 파일명만 추출하고 싶을 때 유용해요.

 

예를 들어~ "D:\ProgramData\workspace\VSCode\Test1\index.html" 이렇게 있다면

경로를 제외한 파일명 "index.html"이 basename, 그 앞에 경로가 dirname이 되는거죠.

basename 명령어 사용법

디렉터리위치를 제거하고 순수하게 파일명만 뽑고 싶을 때 유용한 명령어 입니다.

그런데, 확장명도 제거 할 수 있도록 제공해서 유용해요.

man basename

man basename 쳤을 때 나오는 설명화면 입니다.

중요한건 저기 빨간색 부분! 파일경로나 확장자를 제거할수 있다~

경로만 제거할거면, 굳이 확장자 부분을 작성해줄필요 없고,

뒤에 확장자도 제거하고 싶으면 파일명 다음에 제거하고자 하는 확장자를 넣어주면 돼요.

테스트

1. basename sourcefile.c

확장자 제거 안하고 파일명이 그대로 출력

2. basename /workspace/Project1/src/sourcefile.c

경로만 제거하고 확장자 제거 안한 파일명 sourcefile.c가 출력

3. basename sourcefile.c .c

파일맨뒤에서 ".c"를 제거하고 sourcefile만 출력

4. basename /workspace/Project1/src/sourcefile.c  .c

파일맨뒤에서 ".c"도 제거하고 파일경로도 제거하고 순수 파일이름만 출력

 

cat sample.txt | xargs -n1 basename

리스트 목록 배열로 추출

 

basename 옵션 OPTIONS

■ -a 옵션

옵션으로는 -a가 있는데 인자로 여러가 파일명을 붙일 수 있습니다.

-a 옵션 사용 예시

-a 옵션 뒤에 인자를 3개 넣었더니 결과도 3개 출력된 것을 확인할 수 있어요.

 

■ -s 옵션

suffix를 지정할 때 -s 옵션을 사용하면 됩니다.

.c 확장자가 있는 파일일 경우 .c를 제거하라는 명령어이고~

결과를 보면 .c 확장자가 있는 hello.c 파일만 .c가 제거되었어요.

 

■ -z 옵션

위에 예시들 보면 결과가 다 엔터(개행)으로 분리되어 보이는데

-z는 제로! 결과를 개행으로 구분하지 말고 NULL 즉 구분없이 다닥다닥 붙여서 보여주게 합니다.

 

dirname 사용법

그 다음 바로 이어서 dirname 명령어를 살펴봅시다.

man dirname

중요한 부분은 저기 설명부분~ 

파일명이 풀 경로가 포함된 파일명이라 할 때 가장 마지막 요소를 제거한 나머지니까 즉 경로만!을 의미하죠. 

 

문법도 이게 끝입니당

1.  dirname sourcefile.c

파일명제거하고 현재경로 . 만 남음

2. dirname /workspace/Project1/src/sourcefile.c

파일명을 제거하고 경로 /workspace/Project1/src만 남음

3. dirname ./sourcefile.c

1번과 마찬가지로 파일명 제거 후 현재경로 .만 남음

4. dirname /workspace/Project1/test1.txt /Program/execute.exe

이렇게 인자를 하나가 아닌 여러개를 부여할 수도 있습니다.

 

dirname은 옵션이 -z 이거 밖에 없어요. -z옵션은 위와 동일합니다. 띄어쓰기 없애고 다닥다닥 붙여주는거..

간단하죠?

 

오늘은 이렇게 basename과 dirname 사용하는 법을 알아봤어요~

다음에 또 만나요! 도움이 되었다면 공감 어떤가요?

반응형