programing

파일 경로에서 디렉토리 경로를 추출하는 방법

skycolor 2023. 4. 22. 09:11
반응형

파일 경로에서 디렉토리 경로를 추출하는 방법

Bash에서는 만약VAR="/home/me/mydir/file.c", 입수방법"/home/me/mydir"?

dirname그리고.basename패스 컴포넌트를 추출하기 위해 필요한 툴은 다음과 같습니다.

$ VAR='/home/pax/file.c'
$ DIR="$(dirname "${VAR}")" ; FILE="$(basename "${VAR}")"
$ echo "[${DIR}] [${FILE}]"
[/home/pax] [file.c]

사내용이 아닙니다.bash명령어는 POSIX 표준의 일부입니다(및 을 참조).따라서 이러한 기능은 실행할 수 있는 대부분의 플랫폼에서 사용할 수 있거나 사용할 수 있습니다.bash.

$ export VAR=/home/me/mydir/file.c
$ export DIR=${VAR%/*}
$ echo "${DIR}"
/home/me/mydir

$ echo "${VAR##*/}"
file.c

과의 의존을 피하기 위해basename그리고.dirname

이와 관련하여 파일 이름 또는 상대 경로만 있는 경우dirname그것만으로는 도움이 안 돼요저에게 있어서 답은 결국readlink.

fname='txtfile'    
echo $(dirname "$fname")                # output: .
echo $(readlink -f "$fname")            # output: /home/me/work/txtfile

그런 다음 이 두 개를 결합하여 디렉토리만 가져올 수 있습니다.

echo $(dirname $(readlink -f "$fname")) # output: /home/me/work

대상 파일을 심볼릭 링크로 할 경우 먼저 체크하고 원본 파일을 얻을 수 있습니다.아래의 if 절이 도움이 될 수 있습니다.

if [ -h $file ]
then
 base=$(dirname $(readlink $file))
else
 base=$(dirname $file)
fi
HERE=$(cd $(dirname $BASH_SOURCE) && pwd)

여기서 new_path=를 사용하여 전체 경로를 얻을 수 있습니다.$(dirname ${BASH_SOURCE[0]})현재 디렉토리를 변경하려면cd new_path를 실행하고 나서pwd현재 디렉토리의 전체 경로를 가져옵니다.

저는 이걸 가지고 놀다가 대안을 생각해 냈어요.

$ VAR=/home/me/mydir/file.c

$ DIR=`echo $VAR |xargs dirname`

$ echo $DIR
/home/me/mydir

트리의 백업을 쉽게 확장할 수 있다는 점이 마음에 들었습니다.

$ DIR=`echo $VAR |xargs dirname |xargs dirname |xargs dirname`

$ echo $DIR
/home

'컷'을 사용하여 마지막 필드를 찾는 방법에 대한 접근 방식을 사용하여 다음과 같은 작업을 수행할 수 있습니다.

설명.

  • rev되돌아가다/home/user/mydir/file_name.c되려고c.eman_elif/ridym/resu/emoh/
  • cut사용하다/딜리미터로 두 번째 필드를 선택합니다.ridym/resu/emoh/이 명령어는 첫 번째 문자열까지를 삭제합니다./
  • 마지막으로 다시 반대로 해서/home/user/mydir
$ VAR="/home/user/mydir/file_name.c"
$ echo $VAR | rev | cut -d"/" -f2- | rev
/home/user/mydir

여기 재귀 트리밍에 사용한 스크립트가 있습니다.물론 $1을 원하는 디렉토리로 바꿉니다.

BASEDIR=$1
IFS=$'\n'
cd "$BASEDIR"
 for f in $(find . -type f -name ' *')
 do 
    DIR=$(dirname "$f")
    DIR=${DIR:1}
    cd "$BASEDIR$DIR"
    rename 's/^ *//' *
 done

패스가 절대적인 것이 좋기 때문에 (첫 번째) bash 파라미터에서 필요합니다(변수, 변수 없음).$pdf스크립트 위치가 아님):

즉, 선택한 파일($1) 옆에 하위 폴더를 안정적으로 작성하려면:

rp="$(realpath $(dirname $1)/pfd_extract)"
mkdir -p "$rp"

언급URL : https://stackoverflow.com/questions/6121091/how-to-extract-directory-path-from-file-path

반응형