ディレクトリ内のすべてのファイルと1つを除くすべてのサブディレクトリに対していくつかの操作(文字列の置き換えなど)をどのように実行できますか?

ディレクトリ内のすべてのファイルと1つを除くすべてのサブディレクトリに対していくつかの操作(文字列の置き換えなど)をどのように実行できますか?

次のコマンドを使用しています

find . -type f -exec sed -i 's/_backpack.html/_backpack_cal.html/g' {} +

プロジェクトのすべての "_backpack.html"文字列を置き換えたいのですが、_backpack_cal.htmlこれが起こります。

しかし問題は、私のディレクトリ.gitのファイルも編集してGitが破損することです。他のすべてのサブディレクトリの処理中にfind自分のディレクトリに触れないようにするにはどうすればよいですか?.git

答え1

あなたが使用できる:

find . -name .git -prune -o -type f -exec sed -i 's/_backpack.html/_backpack_cal.html/g' {} +

私が追加した部分は、デフォルトで-name .git -prune「ディレクトリ名がある場合、.gitそのディレクトリを処理しません」という意味です。

また、最初のステートメントがfalseの場合(つまり、処理中のファイル名がディレクトリーの場合)にのみステートメントを実行するという追加事項-o(意味)に注意してください。or.git

もちろん、実際にコマンドを実行する前にそれをテストする必要があります。たとえば、-exec ...いくつかを 。-print

答え2

除外する場合.git:

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

すべての隠しファイルとディレクトリを除外するには:

find . ! -path '*/.*' -type f

関連情報