파일 경로 및 확장자를 제거하고 파일 이름만 유지합니다.

파일 경로 및 확장자를 제거하고 파일 이름만 유지합니다.

/home/test/domain/example.txt 길이와 파일 확장자가 완전히 다를 수도 있는 파일 경로가 있습니다 . 예를 들어:

/reallylongpath/example/longername.vb

확장명 "."을 제거한 후에는 파일 이름을 제외한 모든 것을 제거해야 합니다. 위의 두 가지 예가 필요 example합니다 longername.

나는 당신이 "/"의 마지막 항목으로 가고 싶다고 가정하지만 확실하지 않습니다.

나는 bash를 사용하여 이 작업을 수행하기를 희망합니다.

답변1

고정된 확장의 경우 basename이 유틸리티를 사용하여 다음을 수행할 수 있습니다.

$ f=/home/test/domain/example.txt
$ basename -- "$f" .txt
example

그러나 임의의 확장자가 있으므로 에 전달할 마지막 확장자를 명시적으로 선택해야 합니다 basename. 여기서 쉘의 매개변수 확장을 사용할 수 있습니다:

$ basename -- "$f" ".${f##*.}"
example

또는 그렇게 할 때 매개변수 확장을 사용하여 두 삭제를 모두 수행합니다.

$ x="${f##*/}"; x="${x%.*}"; echo "$x"
example

${var##pattern}var가장 긴 접두사 일치 항목을 제거합니다 pattern. 대신 %%접미사를 사용하고 하나 #또는 %가장 짧은 접두사 또는 접미사를 사용하십시오.

.txt.gz단일 확장과 같은 것을 제거 하려는 경우 대신 x="${x%%.*}"(with double %%)을 사용할 수 있습니다.

주어진 경로가 후행 슬래시 /로 끝나는 경우 마지막 솔루션은 빈 문자열을 출력으로 제공합니다 basename. 주목해야 할 또 다른 상황은 디렉토리 이름에 점이 포함될 수도 있고 /home/test/domain.orig/example.txt.gz, 파일 이름에 점이 전혀 포함되지 않을 수도 있다는 것입니다. (이 모든 상황을 다시 확인하지는 않았습니다.)

관련 문제에 대한 논의는 다음을 참조하세요.

답변2

basename /reallylongpath/example/longername.vb |cut -d"." -f1

편집: 파일 이름에 "."가 있으면 실패합니다. 하지만

basename /reallylongpath/example/lo.ngername.vb |rev| cut -d"." -f2- |rev

당신에게 올바른 정보를 제공할 것입니다

lo.ngername

관련 정보