web-dev-qa-db-ja.com

* nix find -typeフラグ:複数のタイプを受け入れることができますか?

すべてのsimlinkと通常のファイルを取得するためにfindを使用したいと思います。これらに個別に-typeを使用し、-oを使用してそれらをつなぎ合わせることができますが、どうやら-type flを実行できないようです。

このコマンドを要約する方法はありますか?かなり面倒です。

find -type l -name node-dev -exec ls -lah {} + -o -type f -name node-dev -exec ls -lah {} +

次のように、-oなしで実行できるようにしたいと思います。

find -type lf -name node-dev -exec ls -lah {} +

マニュアルページはこれが不可能であることを示しているようです(余分な-typeフラグ引数については何も述べていません)が、とにかく聞いて何かを学ぼうと思いました。

ファイルには、合理的な拡張子の命名構造が保証されていないため、正規表現ベースのソリューションはおそらく機能しないことに注意してください。また、'!'演算子を使用して、このようなディレクトリを除外することもできます 回答が示唆します ですが、理想的には、検索からディレクトリ以外のものを除外したいと思います。

8
Patrick M
# Apply to only link or file type directory entries: 
$ find . \( -type l -o -type f \) -name node-dev -exec ls -lah {} \;

# Apply to anything but a directory - add more with -o in between "\(" & "\)" meta-characters:
$ find . ! \( -type d \) -name node-dev -exec ls -lah {} \;

Findコマンドには、-exec呼び出しを置き換えることができる-lsスイッチがあることに注意してください。最初は検索が遅くなる可能性がありますが、見つかったファイルごとに新しいプロセスを作成する必要があるため、システムリソースがより有効に活用されます。他の場所。

10
Billy McCloskey