/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