素敵ですね: 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 expression
find
ここでしなければならない正しいことは、Michael Homerがコメントで指摘したように、シェルのパターンを引用することです(彼はエスケープだと言っていますが、*
IMHOは全体のパターンを引用する方が良く見え、同じ効果があります)。
find . ! -name '*custom.conf' -delete
このように、パターンはそのまま渡され、find
ユーティリティは現在のディレクトリのすべての名前に対して自己一致を実行します。
-type f
また、通常のファイルでのみ作業できるように、以下を追加したいと思います。
find . -type f ! -name '*custom.conf' -delete