쉘 스크립트를 통해 여러 파일 이름 바꾸기

쉘 스크립트를 통해 여러 파일 이름 바꾸기

다음 파일의 이름을 0 , 0.001 ,0.002 , 0.003 ... , 0.035 로 바꾸고 싶습니다.

0, 1, 2, 3..., 35가 됩니다.

어떻게 해야 합니까?

답변1

bash해결 방법(extglob 쉘 옵션이 활성화된 경우 - 참조패턴 매칭 매뉴얼)

for i in 0.* ; do mv "$i" "${i##0.*(0)}" ; done
  • ${i##i변수 시작 부분에서 가장 긴 일치 항목을 제거합니다.
  • 0.문자 순서 일치0.
  • *(0)0이 0번 이상 나타나는 것을 나타냅니다.

또는 필요하지 않은 @Costas가 제안한 솔루션외부 전역 변수옵션

for i in 0.* ; do mv "$i" "${i#${i%%[!0.]*}}" ; done
  • ${i%%i변수 끝에서 가장 긴 일치 항목 제거
  • *임의의 문자, 0회 이상
  • [!0.]캐릭터 이외의 캐릭터0.
  • ${i%%[!0.]*}따라서 OR이 아닌 첫 번째 문자부터 끝까지 효과적으로 제거합니다. 예: for, for 및 for 전체 문자열이 삭제됩니다.0.350.03510.001str0.00456a0str0.00456astr0.00456a
  • 나머지 문자(예: 0.0for 0.0350.00for 0.001가 전달된 ${i#다음 이러한 문자가 변수의 시작 부분에서 제거되어 35for 0.0351for가 됩니다.)0.001

추가 자료:매개변수 확장

답변2

그리고 rename( prename):

rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*

-n시험 실행이 진행되며 변경 사항에 만족하면 다음을 수행하십시오.

rename 's/^[^.]+\.0*([1-9]+)$/$1/' 0*

예:

% rename -n 's/^[^.]+\.0*([1-9]+)$/$1/' 0*
0.001 renamed as 1
0.002 renamed as 2
0.003 renamed as 3
0.035 renamed as 35

관련 정보