다음 파일의 이름을 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
.
35
0.035
1
0.001
str0.00456a
0str0.00456a
str0.00456a
- 나머지 문자(예:
0.0
for0.035
및0.00
for0.001
가 전달된${i#
다음 이러한 문자가 변수의 시작 부분에서 제거되어35
for0.035
및1
for가 됩니다.)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