![임의의 숫자를 제거하여 여러 파일의 이름을 바꿉니다.](https://linux55.com/image/101779/%EC%9E%84%EC%9D%98%EC%9D%98%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%EC%A0%9C%EA%B1%B0%ED%95%98%EC%97%AC%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
저는 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
여러 가지 옵션이 있으며 모두 _
이름 끝에서 가장 짧은 접미사를 제거합니다.
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
(출력이 만족스러우면 이 옵션을 제거하세요)
쉘 매개변수 확장 사용
$ 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
.