フォルダに削除されていない手動で生成されたファイルを含めることができることがわかっている場合は、フォルダから自動的に生成されたファイルを削除する最良の方法は何ですか? [閉鎖]

フォルダに削除されていない手動で生成されたファイルを含めることができることがわかっている場合は、フォルダから自動的に生成されたファイルを削除する最良の方法は何ですか? [閉鎖]

素敵ですね: find . ! -name *custom.conf -delete

しかし、custom.confがなければ動作しません。

私は考えています:

  • 2つのフォルダに分割
  • find コマンドで正規表現を使用する

免責事項:これは私の最初の質問なので、コメントを追加する方が良いと思いました。https://unix.stackexchange.com/a/247973/247207しかし、コメントを投稿するために必要な評判はありません。

ベストアンサー1

ここでの問題は、ユーティリティを呼び出す前に現在のディレクトリの名前と一致する場合、コマンドラインのファイル名ワイルドカードパターンがシェルによって拡張されることです。

これは、実行される実際のコマンドが次のようになることを意味します。

find . ! -name thing1-custom.conf thing2-custom.conf thing3-custom.conf -delete

set -xコマンドを呼び出す前にコマンドラインでトレースを有効にすると、これを確認できます。set +x後でトレースをオフにするために使用されます。

また、コマンドを実行すると、ユーティリティの実装に応じてunknown optionエラーメッセージが表示されます。paths must precede expressionfind

ここでしなければならない正しいことは、Michael Homerがコメントで指摘したように、シェルのパターンを引用することです(彼はエスケープだと言っていますが、*IMHOは全体のパターンを引用する方が良く見え、同じ効果があります)。

find . ! -name '*custom.conf' -delete

このように、パターンはそのまま渡され、findユーティリティは現在のディレクトリのすべての名前に対して自己一致を実行します。

-type fまた、通常のファイルでのみ作業できるように、以下を追加したいと思います。

find . -type f ! -name '*custom.conf' -delete

おすすめ記事