Skip to content

Bash:Filename

Bash에서 파일이름을 조작하는 방법을 정리한다.

Example

Path를제거하고 파일명 추출:

$ s=/the/path/foo.txt
$ echo ${s##*/}
foo.txt

임의의 확장자 제거:

$ s=foo.txt
$ echo ${s%.*}
foo

More examples:

$ FILE=prog.tar.gz
$ echo ${FILE%%.*}
prog
$ echo ${FILE%.*}
prog.tar
$ echo ${FILE#*.}
tar.gz
$ echo ${FILE##*.}
gz

Example

if [[ -z $INPUT_PATH ]]; then
    print_error "Input file is required"
    exit 1
fi

INPUT_FILENAME="${INPUT_PATH##*/}"
INPUT_PARENT="${INPUT_PATH%/*}"
INPUT_NAME=${INPUT_FILENAME%.*}
INPUT_EXT=${INPUT_FILENAME#*.}
echo "$INPUT_PARENT"
echo "$INPUT_NAME"
echo "$INPUT_EXT"

Rename number

번호 순서로 이름을 변경한다.

$ IDX=1 && for i in *.jpg; do printf "%s\nmonero-01-%02d.jpg\n" "$i" "$IDX"; let "IDX = IDX + 1"; done | xargs -n 2 mv

Bash Function

tar.gz과 같은 두 번째 확장자를 포함하여 확장자 검색 및 확장자를 제거한 파일명 획득 함수는 아래와 같다.

function getFileExtension {
    local name=$1
    local ext=`echo "${name#${name%.tar.*}}"`

    if [[ -z $ext ]]; then
        echo "${name#${name%.*}}"
    else
        echo $ext
    fi
}

function getFileName {
    local name=$1
    local ext=`getFileExtension $name`
    echo "${name%${ext}}"
}

Simple version

$ FILE=prog.tar.gz.double
$ echo ${FILE%%.*}
prog
$ echo ${FILE#*.}
tar.gz.double

See also

Favorite site

References


  1. The_Right_Way_to_Get_the_Directory_of_a_bash_Script.pdf