2014-04-01 2 views
0

특수 문자가있는 파일 및 디렉토리의 이름을 바꾸는 스크립트를 찾고 있습니다. 내 파일 :특수 문자 파일 및 디렉토리 이름 바꾸기 스크립트

?rip?ev <- Directory 
- Juhendid ?rip?evaks.doc <- Document 
- ?rip?ev 2 <- Subdirectory 
-- t?ts?.xml <- Subdirectory file 

그들은 이렇게 될 필요가 예를 들어 .DOC 및입니다 같은 파일 형식은 동일하게 유지하도록 내가 파일과 폴더를 변경해야

ripev <- Directory 
- Juhendid ripevaks.doc <- Document 
- ripev 2 <- Subdirectory 
-- tts.xml <- Subdirectory file 

. xml은 손실되지 않습니다. 마지막으로 이름을 바꾸면서 모든 파일 형식을 잃어 버렸고 파일이이 경우 기본 디렉토리로 이동 되었습니까? rip-ev 디렉토리와 하위 디렉토리가 비어 있습니다. 모든 것은 어머니 디렉토리 /home/samba/ 아래에있었습니다.

그래서이 경우 파일 이름과 디렉토리 이름에서 물음표의 이름을 바꿔야하지만 다른 곳으로 옮기거나 다른 문자 나 파일 유형을 잃어 버리지 않아야합니다. 나는 대답을 위해 구글을 둘러 보았지만 하나도 찾지 못했다. 찾기 및 이름 바꾸기로 끝낼 수 있지만 스크립트의 복잡성을 극복 할 수는 없습니다. 누구든지 제발 도와 주실 래요?

답변

1

전에 그래서 당신은 실제로 전에 무엇을 볼 수 있습니다 아무것도 바꾸는 것. 그렇지 이상 : 이름에 ?위한

  • 검색이 때문에
  • 은 (첫 번째 인수로서 {} 전달 떠들썩한 명령을 실행한다 (? 그래서 탈출해야 * 단일 문자 버전에 해당) 아무 스크립트 이름도 $1 대신 $0입니다.
  • ${0//\?/}에 매개 변수 확장을 수행하여 모든 경우를 ?으로 바꾸지 않습니다.

또한 파일 형식은 linux의 이름과 관련이 없지만 ?이 포함되어 있지 않으면 파일 확장명을 변경해서는 안됩니다.

또한이 파일에 ? (질문에서 예상했는지 여부가 명확하지 않음)이 포함되어 있으면 심볼릭 링크의 이름도 바뀝니다.

+0

감사합니다 :) 정말로 잘 쓰여지고 설명되었습니다. 나는 이것이 나를 위해 일할 것 같아요 :) – mYzk

+0

매력처럼 작동합니다! 많은 친구 감사합니다 :) – mYzk

1

나는 일반적으로 펄에 이런 종류의 일을 : 당신은 그냥이

find -name '*\?*' -exec bash -c 'echo mv -iv "$0" "${0//\?/}"' {} \; 

주처럼 뭔가를 할 수

#!/usr/bin/perl 

sub procdir { 
    chdir @_[0]; 
    for (<*>) { 
    my $oldname = $_; 
    rename($oldname, $_) if s/\?//g; 
    procdir($_) if -d; 
} 
    chdir ".."; 
} 

procdir("top_directory"); 
+0

감사 : 테스트 환경에서 테스트 할 것입니다. 그것이 작동한다면 나는 그 대답을 받아 들일 것입니다. :) 고마워요! – mYzk

관련 문제