반응형
파일 경로에서 파일 디렉토리 경로 가져 오기
Bash에서 if VAR="/home/me/mydir/file.c"
는 어떻게 얻 "/home/me/mydir"
습니까?
dirname
basename
경로 구성 요소를 추출하기 위해 찾고있는 도구는 다음 과 같습니다.
$ VAR=/home/me/mydir/file.c
$ DIR=$(dirname "${VAR}")
$ echo "${DIR}"
/home/me/mydir
$ basename "${VAR}"
file.c
그들은하지 않은 내부 배쉬 명령을하지만 그들은 POSIX 표준의있는 거 부분 (참조 dirname
, basename
배쉬를 실행할 시스템의 대부분에 사용할 수 있어야하므로)합니다.
$ 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
나는 이것을 가지고 놀고 대안을 생각해 냈습니다.
$ 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
다음은 재귀 트리밍에 사용한 스크립트입니다. 물론 $ 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
먼저 /
빈 공간 ( )으로 교체 했습니다 . 그런 다음 빈 공간 앞에 모든 문자를 삭제했습니다 (
). 마지막으로 빈 공간 인 첫 번째 문자 (
) 를 제거했습니다 .
$ VAR="/home/me/mydir/file.c"
$ echo $VAR | tr '/' ' ' | sed 's/^.* / /' | cut -c2-
file.c
참고 URL : https://stackoverflow.com/questions/6121091/get-file-directory-path-from-file-path
반응형
'Programming' 카테고리의 다른 글
YAML에서 문자열에 대한 따옴표가 필요합니까? (0) | 2020.03.03 |
---|---|
새로운 대신 alloc init 사용 (0) | 2020.03.03 |
'with'문에 여러 변수가 있습니까? (0) | 2020.03.02 |
C #에서 목록의 첫 번째 N 요소를 얻는 방법은 무엇입니까? (0) | 2020.03.02 |
Amazon SNS와 Amazon SQS의 차이점은 무엇입니까? (0) | 2020.03.02 |