bash에서 문자를 제거하여 여러 파일의 이름을 바꾸려면 어떻게합니까?


10

각 파일 이름에서 처음 5자를 제거하여 디렉토리의 여러 파일 이름을 바꿔야합니다.
내가 어떻게 bash / shell을 할 수 있습니까? 우분투 11.10을 사용하고 있습니다. 감사.

답변:


11

비트가있는 간단한 for 루프가 sed트릭을 수행합니다.

% touch xxxxx{foo,bar,baz}
% ls -l xxxxx{foo,bar,baz}
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxbaz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 xxxxxfoo  
% for file in xxxxx*; do mv $file $(echo $file | sed -e 's/^.....//'); done
% ls -l foo bar baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 bar
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 baz
-rw-r--r--  1 jamesog  wheel  0 29 Dec 18:07 foo

대체 정규식 의는 sed어떤 5 자 (일치라고 .문자열 (의 시작 수단 모든 문자를) ^) 및 제거합니다.


9

Bash는 놀라운 스크립팅 가능성이 있습니다. 한 가지 방법이 있습니다.

for file in ??????*; do mv $file `echo $file | cut -c6-`; done

수행 작업 을 테스트하는 편리한 방법 은 명령 앞에 에코를 추가하는 것입니다 .

for file in ??????*; do echo mv $file `echo $file | cut -c6-`; done

6 개의 물음표는 5 자보다 긴 파일 이름으로 만이 작업을 시도합니다.


5

sed를 사용 하여이 작업을 수행 할 수 있습니다

for file in * ; do mv $file  $(echo $file |sed 's/^.\{5\}//g'); done

5

모든 훌륭한 답변, 감사합니다. 이것이 내 경우에 효과가 있었던 것입니다.

rename 's/^.......//g' *

1

내 두 센트 ':

for file in *; do mv $file ${file:5}; done

${file:n}n문자열 의 첫 문자를 제거합니다 file.


가장 우아한 답변.
샌드위치
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.