패턴이 있는 폴더의 모든 파일 이름을 바꾸는 방법

패턴이 있는 폴더의 모든 파일 이름을 바꾸는 방법

다음과 같은 파일이 많이 있습니다.

bla.super.lol.S01E03.omg.bbq.mp4
bla.super.lol.S01E04.omg.bbq.mp4
bla.super.lol.s03e12.omg.bbq.mp4

다음과 같이 모두 이름을 바꿔야 합니다.

s01e03.mp4
s01e04.mp4
s03e12.mp4

로 하려고 했는데 for file in *; do mv $file ${file%%\.omg*}; doneS01E01 이전 부분이 아닌 S01E01 이후 부분만 제거되오니 도와주세요.

답변1

와 함께 rename( prename):

rename -n 's/^bla\.super\.lol\.[sS](\d+)[eE](\d+)\..*(\.mp4$)/s$1e$2$3/' *.mp4

-n임시 실행을 수행합니다. 잠재적인 이름 변경에 만족하는 경우 -n실제 이름 변경이 수행되도록 제거하면 됩니다.

rename 's/^bla\.super\.lol\.[sS](\d+)[eE](\d+)\..*(\.mp4$)/s$1e$2$3/' *.mp4

예:

$ ls -1
bla.super.lol.S01E03.omg.bbq.mp4
bla.super.lol.S01E04.omg.bbq.mp4
bla.super.lol.s03e12.omg.bbq.mp4

$ rename -n 's/^bla\.super\.lol\.[sS](\d+)[eE](\d+)\..*(\.mp4$)/s$1e$2$3/' *.mp4
bla.super.lol.S01E03.omg.bbq.mp4 renamed as s01e03.mp4
bla.super.lol.S01E04.omg.bbq.mp4 renamed as s01e04.mp4
bla.super.lol.s03e12.omg.bbq.mp4 renamed as s03e12.mp4

답변2

#!/bin/bash
IFS="\n"                               # Handle files with spaces in the names
for file in *.mp4; do
    newfile="${file/bla.super.lol./}"  # Strip the prefix you don't want
    newfile="${newfile/S/s}"           # Change the first S to an s
    newfile="${newfile/E/e}"           # Change the first E to an e
    newfile="${newfile.%omg.bbq*}"     # Strip the suffix you don't want
    newfile="${newfile}.mp4}"          # Tack on the file extension again
done
if [[ "$file" == "$newfile" ]]; then
    echo "Not renaming $file - no change decreed."
elif [[ -f "$newfile" ]]; then
    echo "Not renaming $file - $newfile already exists."
else
    mv -- "$file" "$newfile"           # Make the change
fi

답변3

간단하게 유지하세요..

rename 's/.*\.(\w+)\.omg\..*mp4$/\L$1.mp4/' *.mp4

예:

$ echo 'bla.super.lol.S01E03.omg.bbq.mp4' | perl -pe 's/.*\.(\w+)\.omg\..*mp4$/\L$1.mp4/'
s01e03.mp4

관련 정보