파일 이름을 바꾸는 Brash one-liner 패턴 일치

어느 날 각 파일에서 패턴을 제거하여 일련의 파일 이름을 바꿔야 하는 상황에 처했습니다. 뭔지 맞춰봐 ? 그들은 약 150개의 PDF 파일이었기 때문에 수동으로 할 방법이 없었습니다.
인터넷에서 검색하는 동안 brash one-liner라는 용어를 찾았습니다. 목표를 달성하기 위해 결합된 일종의 긴 일련의 bash 명령입니다.
그래서 나는 내 문제를 해결하기 위해 내 것을 정의해야 했다. 많은 실험 끝에 나는 다음과 같은 뻔뻔스러운 한 줄짜리를 만들었습니다.

pattern='some-pattern'; find -type f -iname "*$pattern*" | xargs -0 -I{} echo "file=\"{}\"; mv \"\$file\" \"\${file//\"$pattern\"/} " | bash


수수께끼처럼 보입니까? 그래, 네 말이 맞아, 조금이야.
그래서 이 문제를 해결하기 위한 제 접근 방식을 설명하겠습니다.
이를 해결하기 위한 나의 접근 방식은 4단계를 사용합니다.
  • 패턴 정의

  • 파일 검색
  • 텍스트 기반 bash 명령 정의
  • 명령 실행

  • 패턴 정의




       pattern='some-pattern';
    


    여기서는 반복을 피하기 위해 패턴을 변수에 보관합니다(저는 DRY 녀석입니다).
    참고: 쉘에서 실행하기 전에 내 패턴을 평가할 필요가 없기 때문에 여기서는 작은따옴표를 사용합니다.

    파일 검색




      find -type f -iname "*$pattern*"
    


    여기에서 find 명령의 도움으로 대소문자를 무시하고 내 패턴과 일치하는 모든 파일을 검색합니다.
    참고: 패턴이 이름을 바꾸려는 파일과만 일치하는지 확인해야 합니다. 그렇지 않으면 예기치 않은 파일의 이름이 바뀝니다. 이를 먼저 별도로 실행하여 확인하십시오.

    텍스트 기반 bash 명령 정의




       xargs -0 -I{} echo "file=\"{}\"; mv \"\$file\" \"\${file//\"$pattern\"/} "
    


    이것은 마술이 작동하는 곳이므로 각 파일의 새 이름을 정의하기 위해 약간의 트릭을 사용해야 합니다.
    여기서 내 접근 방식은 셸 확장을 사용하는 것입니다.
    찾은 각 파일에 대해 동일한 명령을 실행하기 때문에 xargs 명령을 사용하기로 선택했습니다.
    여기서 -0 인수는 각 항목을 null 문자로 끝내는 것입니다.
    -I{}는 명령에서 {}의 모든 항목을 항목으로 바꾸도록 xargs에 지시하는 것입니다.
    내 텍스트 기반 명령 내에서 $pattern의 모든 항목을 공백 문자로 대체하도록 a를 정의합니다.
    실행 전에 평가할 파일 변수를 피하기 위해 이스케이프 문자를 사용했습니다.
    참고: sed 명령을 사용할 수 있었지만 타이핑을 줄이고 싶었습니다. 그건 그렇고, 이것은 복잡한 명령을 만들 수 있는 곳이므로 상상에 맡기십시오.

    명령 실행




       bash
    


    여기에서 bash가 게임에 와서 수신한 텍스트 기반 bash 명령을 실행합니다.

    하루가 끝나면 이 작은 자습서가 이러한 유형의 문제에 직면하는 경우 도움이 되기를 바랍니다. 토론에 대한 제안이나 개선 사항을 보내주시면 감사하겠습니다. 관심을 가져주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기