2017-11-02 8 views
-1

대문자 알파벳으로 이름이 지정된 파일 목록을 작성한 다음 동일한 이름을 가진 소문자 알파벳으로 파일 이름을 바꾸려고했습니다. 그래서 내가 FILE1, FILE2, FILE3 등등과 같은 파일 이름으로 20 개의 파일을 가지고 있다면 file1, file2, file3 등으로 각각 이름을 바꾸고 싶습니다. 아래 명령을 실행하고 있습니다.find 명령을 사용하여 파일의 이름을 바꿉니다.

[[email protected] files]# find . -name 'FILE*' -exec mv {} `echo {} | tr [:upper:] [:lower:]` \; 

mv 명령에서 오류가 발생했습니다. 누군가 내가 여기에없는 것을 말해 줄 수 있었습니까? mv : './FILE1'과 './FILE1'은 같은 파일입니다. mv : './FILE2'와 './FILE2'는 같은 파일입니다 mv : './FILE3'및 './FILE3' 동일한 파일 임 mv : './FILE4'와 './FILE4'는 같은 파일 임 mv : './FILE5'와 './FILE5'는 같은 파일 임 mv : './FILE6'및 ' ./FILE6 '은 (는) 같은 파일입니다 mv :'./FILE7 '과'./FILE7 '은 같은 파일입니다 mv :'./FILE8 '과'./FILE8 '은 같은 파일입니다 mv :'./ FILE9 '와'./FILE9 '는 같은 파일 임 mv :'./FILE10 '과'./FILE10 '은 같은 파일 임 mv :'./FILE11 '과'./FILE11 '은 같은 파일 임 mv : './FILE12' 와 './FILE12'는 같은 파일입니다 mv : './FILE13'과 './FILE13'은 같은 파일입니다 mv : './FILE14'와 './FILE14'는 같은 파일입니다 mv : ' ./FILE16 '과'./FILE16 '은 같은 파일입니다 mv :'./FILE18 '과'./FILE18 '은 같은 파일입니다 mv :'./FILE20 '과'./FILE20 '은 같은 파일입니다. mv : './FILE15'및 './FILE15'은 같은 파일입니다. mv : './FILE17'및 './FILE17'은 같은 파일입니다. mv : './FILE19'및 './FILE19' 같은 파일입니다. [root @ host-1-1 files] #

추신 : 이미 루프 용으로 사용했으며 제 요구 사항을 충족했습니다. 나는 find 명령에 대한 나의 이해를 위해 노력하고있다. 여기

+0

루트로 실행중인 것 같습니다. 아시다시피 가능한 한 적은 권한으로 계정을 사용해야합니다. –

답변

0

문제는 명령 치환 처음 일 것입니다 :

`echo {} | tr [:upper:] [:lower:]` 

는 그것의 이름을 바꿀 수있는 이름으로 {} 떠난다. 그런 다음에야 find -exec이 그것으로 채우고 템플릿되는 시점에서 파일 이름, 함께 {}을 대체 않습니다 : 물론

mv {} {} 

, 당신이지고있는 오류를 제공 mv ./FILE1 ./FILE1 결과.

+0

그래서 올바른 명령은 무엇입니까? –

+0

쉘에서'for' 반복문을 사용하면됩니다. 질문에서 여러분이 해결했다고 말하는 방식입니다. –

0

YMMV,하지만 때문에 나는 일반적으로 rename 명령에 도달 :

  • 은 간단는
  • "드라이 실행" 옵션이 있습니다 (-n)
  • 은 소지품하지 않습니다 두 파일의 이름이 같은 출력 파일로 바뀐 경우

귀하의 명령은 다음이된다 : examplesman page 일부

rename -n 'y/A-Z/a-z/' FILE* 

연결합니다.

+0

나의 이전을 좋아하는 것. 내 CentOS 시스템에서 이름 바꾸기 옵션을 시도했다. 잘못된 옵션 .. :( –

+0

CentOS에서'prename'이라고 불릴 수도 있습니다 - 실제로 Perl 스크립트입니다. –