나는 파일 세트에 대해 텍스트 처리를 하고 있습니다. 즉, 해당 파일에 대해 find를 실행하고 일부 디렉토리를 무시(및 정리)합니다.
find . -name '*.php' -not \( -path ./.git -prune -o -path ./.idea -prune \) -exec sed -E -i 's/function_call/refactored_function/g' {} '+'
문제는 명령의 첫 번째 부분( -name
예: 스위치 등)(이전)과 exec가 변경될 수 있고 해당 인수가 매우 엄격하다는 것입니다. 그러면 다음과 같이 작성할 수 있는 래퍼를 어떻게 작성해야 합니까?-iname
-type
-not
find
otherfind . -name '*.php' -exec sed -E -i 's/function_call/refactored_function/g' {} '+'
그게 맞을까요 -not \( -path ./.git -prune -o -path ./.idea -prune \)
?
답변1
find
신경 쓰지 않는 파일을 무시하거나 포장하는 방법을 기억하는 대신 다음을 사용 합니다 git grep
.
git grep -z -l function_call -- \*.php |
xargs -0 sed -E -i 's/function_call/refactored_function/g'
function_call
.php
그러면 무시된 파일(정의된 대로 .gitignore
)과 디렉터리를 무시하고 확장명이 있는 모든 파일을 찾아 처리를 위해 .git
전달 합니다 xargs
. -z
옵션은 -0
널 문자를 사용하여 파일 이름을 구분합니다.