파일 이름은 다르지만 위치는 같은 중간에 4자를 제거하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

파일 이름은 다르지만 위치는 같은 중간에 4자를 제거하여 여러 파일의 이름을 바꾸는 방법은 무엇입니까?

Bash를 사용하여 중간에 있는 4자를 제거하여 파일 이름을 바꾸고 싶습니다.

원본 파일 이름:

dwe_hiul123456.pdf
dwe_lkyd345876.pdf
dwe_ythn157843.pdf

중간에 있는 4자를 제거하여 새 파일 이름을 다음과 같이 만들고 싶습니다.

dwe_123456.pdf
dwe_345876.pdf
dwe_157843.pdf

4개의 문자는 항상 뒤에 오고 파일 이름에는 _항상 1개의 문자가 있습니다 . _모든 파일 이름의 길이는 동일하며 제거하려는 4개의 문자가 같은 위치에 있습니다.

저는 이 기능을 처음 접했고 Windows 10을 사용하는 것 외에 어떤 버전을 사용하고 있는지 모릅니다. Git Bash 명령 창을 통해 이 작업을 수행하려고 했습니다.

답변1

Perl-rename이 있는 경우( renameDebian 기반 시스템이나 perl-rename기타 시스템에서 사용 가능) 다음을 수행할 수 있습니다.

$ rename -n 's/_..../_/' *pdf
dwe_hiul123456.pdf -> dwe_123456.pdf
dwe_lkyd345876.pdf -> dwe_345876.pdf
dwe_ythn157843.pdf -> dwe_157843.pdf

변경하지 않고 수행할 작업만 인쇄하는 원인 -n입니다 . rename원하는 대로 작동하는지 확인한 후에는 제거 -n하고 명령을 다시 실행하여 실제로 파일 이름을 바꿉니다.

rename 's/_..../_/' *pdf

어떤 이유로 든 사용할 수 없는 경우 rename간단한 쉘 루프를 사용하여 사용할 수도 있습니다.

for file in *pdf; do
    echo mv -- "$file" "${file/_????/_}"
done

다시 한 번, 원하는 대로 작동한다고 확신한다면 를 제거하여 echo실제로 명령 이름을 바꾸세요.

for file in *pdf; do
    mv -- "$file" "${file/_????/_}"
done

답변2

사용매개변수 확장:

$ for i in *.pdf; do
    echo mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
    #  actual `mv` command
    # mv -- "$i" "${i/_[a-z][a-z][a-z][a-z]/_}"
  done
mv -- dwe_hiul123456.pdf dwe_123456.pdf
mv -- dwe_lkyd345876.pdf dwe_345876.pdf
mv -- dwe_ythn157843.pdf dwe_157843.pdf

결과 가 만족스러우면 echo이를 제거하여 실제로 명령을 수행하십시오.

관련 정보