전체 경로 없이 현재 디렉토리 또는 폴더 이름 가져오기
bash 스크립트에서 현재 작업 디렉터리/폴더 이름을 검색하려면 어떻게 해야 합니까, 더 나은 것은 터미널 명령입니다.
pwd
현재 작업 디렉터리의 전체 경로를 제공합니다./opt/local/bin
하지만 난 그저bin
.
기본 이름이 필요하지 않으며, 특히 pwd를 실행하는 하위 셸이 필요하지 않습니다. (추가적이고 값비싼 포크 작업을 추가합니다.) 셸은 매개 변수 확장을 사용하여 내부적으로 이 작업을 수행할 수 있습니다.
result=${PWD##*/} # to assign to a variable
result=${result:-/} # to correct for the case where PWD=/
printf '%s\n' "${PWD##*/}" # to print to stdout
# ...more robust than echo for unusual names
# (consider a directory named -e or -n)
printf '%q\n' "${PWD##*/}" # to print to stdout, quoted for use as shell input
# ...useful to make hidden characters readable.
다른 상황에서 이 기술을 적용하는 경우(그렇지 않음)PWD
그러나 디렉터리 이름을 포함하는 다른 변수)를 사용하면 후행 슬래시를 잘라내야 할 수 있습니다.다음은 bash의 extglobal 지원을 사용하여 여러 후행 슬래시에서도 작동합니다.
dirname=/path/to/somewhere//
shopt -s extglob # enable +(...) glob syntax
result=${dirname%%+(/)} # trim however many trailing slashes exist
result=${result##*/} # remove everything before the last / that still remains
result=${result:-/} # correct for dirname=/ case
printf '%s\n' "$result"
또는 사용하지 않음extglob
:
dirname="/path/to/somewhere//"
result="${dirname%"${dirname##*[!/]}"}" # extglob-free multi-trailing-/ trim
result="${result##*/}" # remove everything before the last /
result=${result:-/} # correct for dirname=/ case
프로그램을 사용합니다.귀하의 경우:
% basename "$PWD"
bin
$ echo "${PWD##*/}"
사용:
basename "$PWD"
OR
IFS=/
var=($PWD)
echo ${var[-1]}
IFS(Internal Filename Separator)를 공간으로 되돌립니다.
IFS=
IFS 뒤에 공간이 하나 있습니다.
pwd와 base name의 조합을 사용할 수 있습니다.예.
#!/bin/bash
CURRENT=`pwd`
BASENAME=`basename "$CURRENT"`
echo "$BASENAME"
exit;
grep은 어때요?
pwd | grep -o '[^/]*$'
이 실은 정말 멋집니다!맛이 하나 더 있습니다.
pwd | awk -F / '{print $NF}'
basename $(pwd)
또는
echo "$(basename $(pwd))"
저는 선택된 답변(찰스 더피)을 좋아하지만, 당신이 링크된 디르에 있고 당신이 대상 디르의 이름을 원한다면 조심하세요.유감스럽게도 단일 매개 변수 확장 식으로는 수행할 수 없다고 생각합니다. 제가 잘못 알고 있는 것 같습니다.이렇게 하면 됩니다.
target_PWD=$(readlink -f .)
echo ${target_PWD##*/}
이를 확인하기 위한 실험:
cd foo
ln -s . bar
echo ${PWD##*/}
리포트"bar"
DIRNAME
/usr/bin/dirname의 포크 실행 없이 경로의 선행 디렉토리를 표시하려면:
echo ${target_PWD%/*}
예를 들어 foo/bar/baz -> foo/bar를 변환합니다.
echo "$PWD" | sed 's!.*/!!'
본 셸을 사용하는 경우 또는${PWD##*/}
사용할 수 없습니다.
놀랍게도, 아무도 내장된 bash 명령만 사용하는 이 대안을 언급하지 않았습니다.
i="$IFS";IFS='/';set -f;p=($PWD);set +f;IFS="$i";echo "${p[-1]}"
추가 보너스로 다음을 사용하여 상위 디렉토리의 이름을 쉽게 얻을 수 있습니다.
[ "${#p[@]}" -gt 1 ] && echo "${p[-2]}"
이러한 기능은 Bash 4.3-alpha 이상에서 작동합니다.
새로운 과정을 피하기 때문에 특히 찰스 방식을 좋아했지만, 이것을 알기 전에 어색하게 해결했습니다.
pwd | awk -F/ '{print $NF}'
나 같은 기수를 찾으려면,
find $PWD -maxdepth 0 -printf "%f\n"
저는 주로 이 insh 스크립트를 사용합니다.
SCRIPTSRC=`readlink -f "$0" || echo "$0"`
RUN_PATH=`dirname "${SCRIPTSRC}" || echo .`
echo "Running from ${RUN_PATH}"
...
cd ${RUN_PATH}/subfolder
이를 사용하여 작업을 자동화할 수 있습니다.
그냥 사용:
pwd | xargs basename
또는
basename "`pwd`"
regex를 사용하는 아래의 grep도 작동하고 있습니다.
>pwd | grep -o "\w*-*$"
bash 프롬프트 영역에 현재 디렉토리만 표시하려면.bashrc
줄을 지어 들어가다~
옷을 .바꾸다\w
\W
줄에:
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
려달을 합니다.source ~/.bashrc
디렉토리 이름은 프롬프트 영역에만 표시됩니다.
참조: https://superuser.com/questions/60555/show-only-current-directory-name-not-full-path-on-bash-prompt
다음 명령줄을 실행하기만 하면 됩니다.
basename $(pwd)
해당 이름을 복사하려는 경우:
basename $(pwd) | xclip -selection clipboard
저는 GNU 코어유틸리티의 일부인 를 사용하는 것을 강력히 선호합니다.
의 basname
»
pwd | grep -o "[^/]*$"
OR
pwd | ack -o "[^/]+$"
내 껍데기는 그와 함께 오지 않았습니다.basename
패키지와 저는 다른 방법이 있다면 패키지 다운로드를 피하는 경향이 있습니다.
다음은 간단한 별칭입니다.
별칭 이름='기본 이름 $(pwd)'
을 그을당것넣후에은에의신에 넣은 후에.~/.zshrc
또는~/.bashrc
파일및소예싱예(:싱소▁file및ex:).source ~/.zshrc
), 그러면 간단히 실행할 수 있습니다.name
현재 디렉터리 이름을 인쇄합니다.
문자열에서 /로 끝나는 접두사와 접미사(문자열로 표시된 경우)를 삭제하고 표준 출력에 결과를 인쇄하는 기본 이름 유틸리티를 사용할 수 있습니다.
$basename <path-of-directory>
다음 시간까지 모든 문자를 제거합니다./
(또는)\
Windows(윈도우)를 사용하는 경우).을 부리듯 입니다./
:
pwd | sed 's/.*\///g'
이 경우 결과는 예상대로입니다.
λ a='/opt/local/bin'
λ echo $a | sed 's/.*\///g'
bin
다음 명령을 실행하면 현재 작업 디렉터리가 bash 스크립트로 인쇄됩니다.
pushd .
CURRENT_DIR="`cd $1; pwd`"
popd
echo $CURRENT_DIR
언급URL : https://stackoverflow.com/questions/1371261/get-current-directory-or-folder-name-without-the-full-path
'programing' 카테고리의 다른 글
로그캣이 안드로이드에서 아무것도 표시되지 않는 이유는 무엇입니까? (0) | 2023.05.10 |
---|---|
"던지기"와 "던지기" 사이에 차이점이 있습니까? (0) | 2023.05.10 |
VB에서 #IF DEBUG를 사용하는 방법.그물 (0) | 2023.05.10 |
VBA 코드를 64비트 Windows와 호환되도록 하려면 어떻게 해야 합니까? (0) | 2023.05.10 |
mongo 명령을 사용할 수 없습니다. mac에서 명령을 찾을 수 없음을 표시합니다. (0) | 2023.05.10 |