検索コマンド:複数の条件

検索コマンド:複数の条件

ファイル/ディレクトリの命名の標準として、日付とラベル文字列をアンダースコアで区切られたファイル名に入れるのと同じ方法を使用します。たとえば、次のようになります。

2015_03_10_usa_nyc_vacations_album_pictures

長い間Recollなどのソフトウェアを使用してきましたが、通常、このソフトウェアは必要以上の記録を提供してきました。私の名前はとても一貫しているので、findコマンドを使ってスクリプトを書く方法が必要だと思いました。

単一の条件で検索検索を実行する方法を知っていますが、複数の条件/条件を見つける方法がわかりません。つまり、名前が特定の条件を満たすすべてのファイルを見つける方法です。以下を含む次の例を考えてみましょう。

  1. {2015}AND {{アルバム} OR {写真}}
  2. {アルバム} AND {休日} AND NOT {2015}

答え1

初めて

 find DIR \( -name 2015\* -a \( -name \*album\* -o -name \*picture\* \) \) -delete

どこ

  • *拡張を避けるために脱出する必要があります。
  • サブシェルを避けるには、エスケープ(および)する必要があります。
  • -deleteお気に入りのものと交換してください

2番目は宿題として残してください(ヒント\!

答え2

通常そんな価値がない次のように入力します。

find /dir -regex '.*2015.*\(album.*\|picture.*\)'

時間を無駄にするのではなく、grepと「タスクごとに1つのツール」というUNIXの概念を使用してください。

find /dir | egrep '2015.*(album|picture)'

利点:

  • タイピング回数が減り、結果が速くなります。
  • もっと読みやすい(\なし、不要な*)
  • より速く実行できます。 pipe コマンドを使用すると、カーネルが 2 つの CPU 間でバランスを保つことができます。はい、今は通常のコンソールでテストしました)
  • ファイルリストや他のソースから読みたい場合は、動作は似ています。

答え3

最初のケースfindでは-regex大丈夫でしょう。

find /dir -regex '.*2015.*\(album.*\|picture.*\)'

2番目の場合:

find . -name "*album*" -a -name "*vacations*" -a -not -name "*2015*"

関連情報