致命的:検索と置換後に不明なインデックス項目の種類

致命的:検索と置換後に不明なインデックス項目の種類

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を使用します。パターンマッチングテストは、コマンドラインで指定された開始点の1つから始まり、ファイル名全体に適用されます。。ここで絶対パス名を使用することは、関連する始点が絶対パスである場合にのみ意味があります。これは、コマンドがどんなものとも一致しないことを意味します。

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

Findは、-path引数をディレクトリ名と解決中のファイルのデフォルト名の関連付けと比較します。接続はスラッシュで終わらないため、スラッシュで終わる -path 引数はどれとも一致しません (コマンド行で指定された始点を除く)。 HP-UX findは、POSIX 2008標準の一部である-path述語をサポートしています。

したがって、-not -path './.git'実際には何も除外しません。たとえば、私のリポジトリの1つでは:

$ 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 \)

おすすめ記事