
.ts
일부 파일이 포함된 React 애플리케이션이 있고.tsx
현재 .ts 및 .tsx 파일의 내용을 업데이트하려면 2개의 개별 명령을 실행해야 합니다.
internal-web main % cd src
src main % find . -name '*.tsx' -print0 | xargs -0 sed -i "" "s/SomeThing/SOME_THING/g"
src main % find . -name '*.ts' -print0 | xargs -0 sed -i "" "s/SomeThing/SOME_THING/g"
.ts 및 .tsx 파일을 동시에 업데이트할 수 있도록 이 명령을 하나의 명령으로 결합하는 방법이 있습니까?
답변1
넌 할 수있어:
find . \( -name '*.tsx' -o -name '*.ts' \) -print0 |
xargs -0 sed -i "" "s/SomeThing/SOME_THING/g"
sed
또는 훨씬 더 간단하고 이식성이 뛰어납니다( 파일을 찾을 수 없을 때 발생하는 오류 방지 ).
find . \( -name '*.tsx' -o -name '*.ts' \) -exec sed -i "" "s/SomeThing/SOME_THING/g" {} +
어쨌든 이것은 -i
표준 옵션이 아니라는 점에 유의하십시오 sed
. sed -i ""
FreeBSD 구현을 사용하는 것이 좋습니다 sed
(macOS에서도 사용 가능). 대부분의 다른 sed
구현에서는 a를 지원하지 않거나 a를 생략 -i
해야 합니다 ""
.
답변2
-regex
대신 결합된 필터를 사용할 수 있습니다 -name
. 다음 파일이 주어지면
src/
src/subdir-2
src/subdir-2/not-interesting.tsn
src/subdir-2/bar.ts
src/subdir-2/bar.tsx
src/subdir-2/not-interesting.not
src/subdir-1
src/subdir-1/not-interesting.tsn
src/subdir-1/foo.tsx
src/subdir-1/foo.ts
src/subdir-1/not-interesting.not
다음 명령을 사용하여 필터링 .ts
하고 .tsx
파일링 할 수 있습니다.find src/ -regex '.+\.tsx?$'
src/subdir-2/bar.ts
src/subdir-2/bar.tsx
src/subdir-1/foo.tsx
src/subdir-1/foo.ts
답변3
find
이 경우에는 실행할 필요가 없습니다. bash
쉘(globstar 구현의 일부 버그를 수정하는 버전 4.0 이상, 바람직하게는 5.0 이상)을 사용하는 경우 대신 globbing을 사용할 수 있습니다.
sed -i "" "s/SomeThing/SOME_THING/g" ./**/*.ts?(x)
이는 특히 다음과 같은 확장 일치 연산자를 사용합니다.
'?(PATTERN-LIST)'
Matches zero or one occurrence of the given patterns.
shopt -s globstar
먼저 globstar( ) 및 extglob
( )를 활성화해야 합니다 shopt -s extglob
.
숨겨진 파일은 건너뛰고, shopt -s dotglob
처리되기를 원하면 추가하세요 find
.