임의의 숫자를 제거하여 여러 파일의 이름을 바꿉니다.

임의의 숫자를 제거하여 여러 파일의 이름을 바꿉니다.

저는 Ubuntu를 사용하고 있으며 파일이 많습니다. 파일에는 두 가지 유형이 있습니다.

"img_00000_c0_1283347740957299us.jpg" 
"img_00000_c1_1283347740342342us.jpg"

c0 또는 c1로 구분됩니다. 파일 번호가 증가할수록 "00000" 위치의 번호도 증가합니다. 예를 들어 c0을 입력하면 5번째 파일의 이름은 "img_00005_c0_1283347740957299us.jpg". 문제는 "c0_" 또는 "c1_" 뒤의 긴 숫자가 나에게 아무런 의미가 없으며 임의의 숫자라는 것입니다. 항상 "1283347740957299us"가 아닙니다. 따라서 이 파일의 이름을 바꾸고 싶습니다. 마지막 항목만 제거하세요. 숫자.

img_00005_c1_1283347740957299us.jpg ---> img_00005_c1.jpg

나는 온라인에서 몇 가지 답변을 시도했습니다. 예를 들면 이런 대답이요

for FILE in eventDataLog.txt.2015*; do mv "$FILE" "abc-$FILE"; done

위의 코드는 다음에서 나온 것 같습니다.이 답변도움이 되겠지만 제 경우에는 이름을 바꾸는 것이 문자를 추가하는 것이 아닙니다. 이름 부분 빼기에 대한 답변도 찾았습니다.여기, 하지만 내 경우에는 임의의 숫자입니다.

미리 감사드립니다!

답변1

여러 가지 옵션이 있으며 모두 _이름 끝에서 가장 짧은 접미사를 제거합니다.

  1. Perl 기반 prename명령 사용

    $ prename -nv -- 's/_[^_]*\.jpg/.jpg/' *.jpg
    img_00000_c0_1283347740957299us.jpg renamed as img_00000_c0.jpg
    img_00000_c1_1283347740342342us.jpg renamed as img_00000_c1.jpg
    

n(출력이 만족스러우면 이 옵션을 제거하세요)

  1. 쉘 매개변수 확장 사용

    $ for f in img_*.jpg; do echo mv -- "$f" "${f%_*}.jpg"; done
    mv -- img_00000_c0_1283347740957299us.jpg img_00000_c0.jpg
    mv -- img_00000_c1_1283347740342342us.jpg img_00000_c1.jpg
    

echo(출력이 만족스러우면 제거하세요).

패턴을 보다 구체적으로 일치시키려면(예: 하나 이상의 십진수 시퀀스와 뒤에 us) 그렇게 할 수 있지만 제공한 정보에 따르면 이는 필요하지 않은 것 같습니다.

답변2

문자열 앞에 16자리 숫자가 있는 것 같습니다 us. rename아래와 같이 총 18자를 제거 할 수 있습니다 .

rename -v 's/_(\d){16}us//' *.jpg
img_00000_c0_1283347740957299us.jpg renamed as img_00000_c0.jpg
img_00000_c1_1283347740342342us.jpg renamed as img_00000_c1.jpg
img_00005_c1_1283347740957299us.jpg renamed as img_00005_c1.jpg

(verbose) 옵션은 -v이름이 바뀐 파일 이름을 표시합니다. 이 (\d){16}패턴은 16자리 숫자 집합을 나타냅니다. 위에 표시된 출력은 세 가지 입력 파일 예시를 기반으로 합니다. 더 많은 내용을 읽을 수도 있습니다.의 예rename.

관련 정보