여러 디렉터리 이름의 특정 부분을 자르는 방법은 무엇입니까?

여러 디렉터리 이름의 특정 부분을 자르는 방법은 무엇입니까?

상위 디렉터리(/home/anik/"All My Directories")에 다음과 같은 이름 지정 구조를 가진 100개의 디렉터리가 있습니다.

  • Zt.isolate1.Spade
  • Zt.isolate2.Spades
  • Zt.isolate100.Spades

"Zt"를 제거하고 싶습니다. 그리고 각 디렉토리 이름의 ".Spades" 부분.

루프의 모든 디렉터리에 대해 이 작업을 수행하는 방법을 알려주실 수 있나요? 감사해요.

답변1

이름을 반복하고 변수 대체를 사용하여 원하지 않는 비트를 제거합니다. 다음은 이것이 파일이 있는 위치 $HOME라고 가정합니다( 파일이 다른 곳에 있는 경우 다른 값으로 변경)./home/aniktopdir

#!/bin/sh

topdir=$HOME

for dirpath in "$topdir"/Zt.*.Spades; do
    [ ! -d "$dirpath" ] && continue

    newdirpath=$topdir/${dirpath#$topdir/Zt.}
    newdirpath=${newdirpath%.Spades}

    if [ -e "$newdirpath" ]; then
        printf 'Can not rename "%s" into "%s", name taken\n' "$dirpath" "$newdirpath"
    else
        printf 'Renaming "%s" into "%s"\n' "$dirpath" "$newdirpath"
        echo mv "$dirpath" "$newdirpath"
    fi
done

이 표현식은 처음에 디렉터리 파일 이름이 없는 $topdir/${dirpath#$topdir/Zt.}디렉터리의 경로 이름으로 대체됩니다 . Zt.접두사를 제거한 $topdir/Zt.다음 $topdir/처음에 다시 추가하여 이를 수행합니다.

표현식은 값 끝에서 문자열을 ${newdirpath%.Spades}확장하지만 제거합니다.$newdirpath.Spades

echomv명령어를 실행하는 대신 실행할 명령어를 출력하기 위해 명령어 앞에 추가했습니다 . 코드를 테스트 echo하고 올바른 것으로 보이면 삭제하세요.

답변2

Perl 도구를 사용할 수 있습니다 rename.

rename -n 's/Zt\.(.+?)\.Spades$/$1/' /home/anik/Zt.*.Spades

( -n출력이 만족스러우면 삭제하여 실제로 이름을 바꾸세요)


확인하다이것올바른 rename도구를 선택하십시오.

관련 정보