치명적: 검색 및 교체 후 알 수 없는 인덱스 항목 형식

치명적: 검색 및 교체 후 알 수 없는 인덱스 항목 형식

Linux에서 오류 없이 검색 및 교체를 수행하려면 어떻게 해야 합니까?

$ git status
On branch main
Your branch is up to date with 'origin/main'.

nothing to commit, working tree clean

$ find . -not -path './.git' -type f -exec sed -i -e 's/old/new/g' -e 's/old2/new2/g' {} +
$ git status
fatal: unknown index entry format 0x74650000

문자열 oldnew자리 표시자입니다.

답변1

-path테스트 find경기모두이름. man find(강조 내) 에서 :

-경로 모드

파일 이름은 쉘 패턴과 일치합니다. 메타문자는 /' or특별히 처리되지 않습니다 . 예를 들어 다음과 같습니다.

    find . -path "./sr*sc"

./src/misc라는 디렉토리에 대한 항목이 있으면 인쇄됩니다. 전체 디렉토리 트리를 무시하려면 트리의 모든 파일을 확인하는 대신 -prune을 사용하십시오. 패턴 일치 테스트는 명령줄에 명명된 시작점 중 하나부터 시작하여 전체 파일 이름에 적용됩니다.. 여기서 절대 경로 이름을 사용하는 것은 관련 시작점이 절대 경로인 경우에만 의미가 있습니다. 이는 명령이 어떤 것과도 일치하지 않음을 의미합니다.

 find bar -path /foo/bar/myfile -print

Find는 -path 인수를 디렉터리 이름과 확인 중인 파일의 기본 이름의 연결과 비교합니다. 연결은 슬래시로 끝나지 않으므로 슬래시로 끝나는 -path 인수는 어떤 것과도 일치하지 않습니다(명령줄에 지정된 시작점 제외). HP-UX find는 POSIX 2008 표준의 일부인 -path 조건자를 지원합니다.

따라서 -not -path './.git'실제로는 아무것도 제외하지 않습니다. 예를 들어, 내 저장소 중 하나에서:

$ find . -not -path './.git' -type f | grep -m5 git 
./.git/COMMIT_EDITMSG
./.git/logs/HEAD
./.git/logs/refs/heads/master
./.git/description
./.git/HEAD

./git/다음 과 같이 문자로 시작하고 뒤에 문자가 오는(또는 문자가 없는) 파일을 제외하는 것을 사용하려고 합니다 .

find . -not -path './.git/*' -type f

하지만 그것조차도 당신이 정말로 원하는 것은 아닙니다. 전체 하위 디렉토리를 건너뛰고 싶을 뿐인데 ./.git, -prune위에서 인용한 매뉴얼 페이지에 다음과 같은 내용이 나와 있습니다.

find . -type f \( -path './.git/*' -o -print \)

관련 정보