find에서 exec에 함수 인수 전달

find에서 exec에 함수 인수 전달

여러 파일에서 텍스트를 찾아 바꾸는 기능을 정의하고 싶습니다. 명령줄을 찾았습니다

find . -type f -exec bash -c 'mv "$1" "${1/<string_to_find>/<string_to_replace>}"' _ {} \;

자주 사용해야 하기 때문에 다음과 같은 파일 .zshrc의 함수 에 넣고 싶습니다.

myrename() {
    find . -type f -exec bash -c 'echo mv "$1" "${1/$arg1_myrename/$arg2_myrename}"' _ {} \;
}

폴더에 있는 해당 이름을 가진 모든 파일이 $ myrename "<string_to_replace>" "<replacement>".<string_to_replace><replacement>

답변1

모드 및 매개변수를 환경 매개변수로 다음에 전달할 수 있습니다 find.

myrename(){
    in=$1 out=$2 find . -type f -exec bash -c 'mv -- "$1" "${1/$in/$out}"' _ {} \;
}

그러나 Kosalonanda가 말했듯이 그것이 바로 그것입니다 rename.

myrename(){
    find . -type f -exec rename "s/$1/$2/" {} +
}

관련 정보