2012-04-16 2 views
0

나는 달성하고자하는 것을 위해 작동하는 스크립트를 찾고/작성하기 위해 철저히 조사했습니다.Bash의 파일 이름에서 하이픈을 제거하십시오.

저는 배쉬 (Bash)로 여러 파일 이름을 변경하려고합니다. 같은 디렉토리에 더 많은 파일을

YachtRescueVO041512.mpg

YachtRescueVO041512.mpg

을하지만, 거기에이 유형에서, 난 그냥 하이픈을 제거하기 위해 노력하고있어 . 나는 하이픈과 날짜를 모두 제거하기 위해 노력하고있어 :

6CO1-041512.mpg

6C01.mpg을

내가 정렬하는 정규 표현식을해야 확실 해요 6B1A, 3TSE1, CO1, 11TSE3, TS1 등과 같은 다른 파일 이름 지정 규칙이 있기 때문에이를 통해, 나는 이것이 긴 스크립트가 될 것이라는 것을 깨닫는다. 너는 자유 시간이 있으면, 나는 도움을 크게 평가할 것입니다.

+0

하이픈 만 제거 할시기와 하이픈과 날짜를 모두 제거 할시기를 어떻게 결정합니까? –

+0

가능한 복제 http://stackoverflow.com/questions/10158704/remove-hyphens-from-filename-with-bash/10158742#10158742 –

+0

@idoperceive 당신은 내가 방금 링크 한 질문을 실제로 게시 한 사람입니다. 이 질문에 대한 대답은이 문제를 정확하게 해결합니다. 디렉토리와 하위 디렉토리에 하이픈이있는 파일을 모두 찾아 하이픈이없는 파일로 바꿉니다. –

답변

1

글쎄, 나는 그런 스크립트를 할 시간이 없어,하지만 난 당신이 다음 명령을 살펴해야한다고 생각 :

  • AWK를 잘라 이름을 변경
  • 을 나오지

    그렇습니다. 정규 표현식은 매우 효율적인 방법이지만, 구문을 사용하면 정말 효율적으로 시간이 걸립니다.

  • 1

    Bash parameter expansion

    한다고 가정 파일 이름이 var에 참조 :

    new_var = ${var%-*}${var#*-}

    이 첫 번째 예를 들어 미세 것이다. 두 번째 예 :

    new_var = ${var%-*}.${var#*.}

    나는 당신이 당신의 질문에서 수행 할 대체 무엇을 인식 할 수 없습니다.

    1

    나는 이미 here를 묻는 질문이 게시하지만, 경우에 당신이, 이것은 모든 디렉토리에있는 파일과 하위 디렉토리의 이름을 변경하는 별도의 문제라고 생각합니다 :

    for file in $(find dirWithDashedFiles -type f -iname '*-*'); do 
        mv $file ${file//-/} 
    done 
    

    주의 사항이 모두를 I 다른 게시물에 명시된 내용이 적용됩니다.

    필요에 따라 문자열 작업을 수정할 수 있습니다.

    for file in $(find dirWith6C01Files -type f -iname '6C01*'); do 
        mv $file ${file%[0-9][0-9][0-9][0-9][0-9][0-9].mpg}.mpg 
    done 
    

    This site 당신이 시작할 수 있어야 bash는 문자열 작업에 대한 몇 가지 정보를 가지고 예를 들어, 당신은 하이픈을 모두 제거 후에는이 이름으로 6C01을 가진 파일의 날짜 없애 실행할 수 있습니다 regexes에 당신이 필요합니다.

    참고 : 일치하는 정확한 문자 수를 지정하는 데는 아무 것도 기억할 수 없거나 찾을 수 없었습니다. la [0-9]{6} (egrep)입니다. 누군가 찾으면 나에게 알려 줘.

    +0

    양해 해 주셔서 감사합니다. 마침내 이것을 내 상황에 맞는 작품으로 만들 수 있습니다. 고맙습니다! – idoperceive

    +0

    굉장합니다. 공개 질문에 대한 대답을 선택할 수 있습니까? –

    관련 문제