각 파일 이름에서 서로 다르지만 동일한 위치에 있는 중간 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

renamePerl-rename(Debian 기반 시스템 또는 기타 시스템에서 사용 가능 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이를 제거하여 실제로 명령을 실행하세요.

관련 정보