답변:
for name in TestSR*
do
newname=CL"$(echo "$name" | cut -c7-)"
mv "$name" "$newname"
done
이 명령은 bash 명령 대체를 사용하여 via를 통해 입력 파일 이름에서 처음 6자를 제거 하고 결과 cut
앞에 추가 CL
하고에 저장합니다 $newname
. 그런 다음 이전 이름을 새 이름으로 바꿉니다. 이것은 모든 파일에서 수행됩니다.
cut -c7-
색인 7 이후의 문자 만 입력에서 리턴되도록 지정합니다. 7-
는 끝없는 인덱스 7에서 시작하는 범위입니다. 즉, 줄 끝까지.
이전에는을 사용 cut -b7-
했지만 -c
UTF-8과 같이 문자 당 여러 바이트를 가질 수있는 문자 인코딩을 처리하는 데 사용해야합니다.
rename
많은 Linux 배포판에서 일반적으로 사용되는 명령을 사용하는 것이 가장 간단하다고 말하고 싶습니다 . 이 명령에는 두 가지 공통 버전이 있으므로 해당 매뉴얼 페이지에서 다음 중 하나를 찾으십시오.
## rename from Perl (common in Debian systems -- Ubuntu, Mint, ...)
rename 's/^TestSR/CL/' *
## rename from util-linux-ng (common in Fedora systems, Red Hat, CentOS, ...)
rename TestSR CL *
데비안 시스템에서 util-linux-ng의 버전을 사용하려면 이름 아래에 있습니다. rename.ul
rename
야생에는 여러 버전이 존재합니다. rename
사용 방법을 알아 보려면 지역 설명서를 확인 하십시오.
rename TestSR '' *
rename "\<pre\>" "" *
>Unterminated <> operator at (user-supplied code).
쉘 매개 변수 확장 은 이와 같은 간단한 변환에 충분합니다. 명령 대체 자체와 cut
/를 위해 추가 프로세스를 생성해야하기 때문에 명령 대체가 덜 효율적 sed
입니다.
for f in TestSR*; do mv "$f" "CL${f#TestSR}"; done
TestSR*
파일을 찾고 CL${f#TestSR}
새 이름이됩니다. 뒤에 #
나오는 것은 파일 이름 ( f
) 으로 대체됩니다 .
당신은 시도 할 수 있습니다 :
for i in TestSR*; do mv ${i} ${i/#TestSR/CL}; done
자세한 내용은 man bash
( "매개 변수 확장"섹션)을 참조하십시오.
글쎄, 나만큼 힘들지는 않았다.
$ for f in TestSR*.m; do mv $f CL$(echo $f | cut -c7-); done;
$ for f in TestSR*.h; do mv $f CL$(echo $f | cut -c7-); done;
for f in TestSR*.[mh]
, for f in TestSR*.{m,h}
, for f in TestSR*.m TestSR*.h
.
좀 더 굳은 것이 필요하다면 이것을 할 수 있습니다
perl -e 'for(@ARGV) { rename($_, $n) if( ($n = $_ ) =~ s/^TestSR/CL/) }' *