파일명 중간 앞의 2글자를 제거하세요.

파일명 중간 앞의 2글자를 제거하세요.

다음과 같은 폴더에 많은 파일 이름이 있습니다.xxxxxxxxx.zip

쉘 스크립트를 사용하여 모든 파일에서 점 앞의 마지막 2자를 제거하는 방법.

abcd12345678.zip예를 들어abcd123456.zip

답변1

셸 내부에서는 변수 확장을 사용할 수 있습니다.

fname에 파일 이름이 포함된 경우( abcd12345678.zip예:) 다음을 수행할 수 있습니다.

fname=abcd12345678.zip
ftail=${fname##*.}
fnew=${fname%??".$ftail"}

echo mv "$fname" "$fnew.$ftail"

디렉터리의 모든 파일을 처리합니다(파일이 이미 존재하는지 확인).

for fname in *.zip; do
    ftail=${fname##*.}
    fnew="${fname%??".$ftail"}.$ftail"

    if [ -e "$fnew" ]; then
        echo "File $fnew already exist, not moving"
    else
        echo mv "$fname" "$fnew"
    fi
done

작동한다고 확신하면 echo이전 항목을 제거하여 실제로 파일을 이동하세요.echo mv ....

답변2

무엇에 대해 rename?

rename 's/..\././g' abcd12345678.zip

sed구문은 의 구문과 동일합니다.

답변3

널리 사용되는 Bash 쉘을 사용하면 =~연산자를 테스트에 사용하여 정규식을 테스트할 수 있습니다 [[. 변수에 f다음이 포함되어 있다고 가정합니다.

$ echo "$f"
abcd12345678.zip

다음과 같이 마지막 숫자를 일치시킬 수 있습니다.

$ [[ "$f" =~ (.*)..\.zip ]] && echo "${BASH_REMATCH[1]}".zip
abcd123456.zip

아니면 다음과 같이 더 추상적으로 만들 수도 있습니다.

$ [[ "$f" =~ (.*)..(\.zip) ]] && echo "${BASH_REMATCH[1]}""${BASH_REMATCH[2]}"

이름을 바꾸려면 를 사용하십시오 mv.

답변4

그리고 zsh:

autoload -Uz zmv # best in ~/.zshrc
zmv -n '(*)??(.*)' '$1$2'

만족스러우면 제거하세요 -n(드라이런의 경우).

파일 이름에 점이 여러 개 포함된 경우 마지막 문자 앞의 2문자가 삭제됩니다.

관련 정보