![find용 래퍼를 작성하는 방법은 무엇입니까?](https://linux55.com/image/128247/find%EC%9A%A9%20%EB%9E%98%ED%8D%BC%EB%A5%BC%20%EC%9E%91%EC%84%B1%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 파일 세트에 대해 텍스트 처리를 하고 있습니다. 즉, 해당 파일에 대해 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
널 문자를 사용하여 파일 이름을 구분합니다.