2017-12-21 5 views
0

123456_1_2.mpg와 같은 이름의 파일 그룹을 123456.mpg로 바꾸고 싶습니다. 어떻게 터미널 명령을 사용하여이 작업을 수행 할 수 있습니까?linux에서 확장 기능을 사용하기 전에 여러 파일의 이름을 바꾸려면 어떻게합니까?

+0

가능한 복제 [리눅스의 공백 문자 후에 모든 것을 제거 폴더에있는 모든 파일의 이름을 변경하는 방법?] (https://stackoverflow.com/questions/19642100/how-to-rename-all-files-in-a-folder-removing-everything-after-space-character-in) –

답변

1

사용 가능한 모든 파일을 반복하려면 ??????_?_?.mpg 형식의 파일 이름에 for 루프를 사용할 수 있습니다.

파일의 이름을 바꾸려면 외부 명령을 사용하지 않고 ${MYVAR%%pattern}을 사용하여 문자열 시작 부분에서 가장 짧은 패턴 일치를 유지할 수 있습니다. 우리는 숫자의 첫 번째 순서하지만 모든 것을 제거하는 grep을 사용할 수 있습니다

#!/bin/bash 
shopt -s nullglob    # do nothing if no matches found 
for file in ??????_?_?.mpg; do 
    [[ -f $file ]] || continue # skip if not a regular file 
    new_file="${file%%_*}.mpg" # compose the new file name 
    echo mv "$file" "$new_file" # remove echo after testing 
done 
0

:

는이 같은 코드를 보여야했다. --interactive 깃발은 각 이동에 대해 확실한지 물어볼 것이므로 예상치 못한 일을하지 않도록 할 수 있습니다.

for file in *.mpg; do 
    mv --interactive "$file" "$(grep -o '^[0-9]\+' <<< "$file")".mpg 
done 

정규식 ^[0-9]\+ "은 번호로 시작하고 0 또는 그 이상의 숫자 뒤에 문자의 시퀀스"로 변환한다.

1
rename 's/_.*/.mpg/' *mpg 

이 첫 번째 밑줄 및 MPG로 끝나는 모든 파일에 대한 MPG 파일 확장자 사이에 모든 것을 제거합니다

+0

Up. 목적에 맞게 제작되었습니다. 기본적으로 파일을 덮어 쓰지 않습니다 (예 : 123456_1_1.mpg 및 123456_1_2.mpg). – masseyb

관련 문제