web-dev-qa-db-ja.com

Unix / Linux検索で検索するときに隠しファイルを除外しますか?

隠しファイルを除外するには、 find でどのオプションを使用する必要がありますか?

39
therefromhere

私はこれを見つけました ここ

find . \( ! -regex '.*/\..*' \) -type f -name "whatever"
15
Jarvin

否定グロブパターンはよく知られていないようです。だからあなたは使うことができます:

find . -name "[!.]*"
16
reddot

これはあなたの質問の答えにはなりませんが、非表示でないファイルを見つけるタスクでは、すべてのファイルを見つけさせてからgrepでフィルタリングしたいと思います。

find . -type f | grep -v '/\.'

あなたのアプローチに似ていますが、おそらくもう少し簡単です。

12
Simon Chiang

次のfindの使用を試してください。

find . -type f -not -path '*/\.*'

これは、すべての隠しファイル(ドットで始まるファイルとディレクトリ)を無視します。

6
kenorb

隠しファイルを見つけるには:

find -name '[.]*'

可視ファイルを見つけるには:

find -name '[!.]*'

とても簡単です。

2
Paul

目的がfindおよびgrepである場合、 ripgrep はデフォルトで隠しファイルを除外します。

rg --files

--files実際に検索を実行せずに、検索される各ファイルを印刷します。

1
kenorb

fd

fdの代わりに、findを使用してください。デフォルトでは、次のとおりです。

  • デフォルトでは、非表示のディレクトリとファイルを無視します。
  • デフォルトでは、.gitignoreのパターンを無視します。

ベンチマーク分析 を確認します。

1
kenorb

私はfindnhというスクリプトを作成しました。このスクリプトは、Webで見つけたこの質問への回答よりも、特定のEdgeケースをより適切に処理すると思います。

#!/bin/bash

declare -a paths

while [ $# -ne 0 ]; do
  case "$1" in -*) break ;; esac
  paths+=("$1")
  shift
done

find "${paths[@]}" \( -name . -o -name .. -o \! \( -name '.*' -Prune \) \) "$@"

たとえば、findnh ~/.hiddendir/のように~/.hiddendir/fileは表示されますが~/.hiddendir/.superhiddenfileは表示されないコマンドを使用すると、明示的に指定された非表示ディレクトリ内の非表示でないファイルやディレクトリを見つけることができます。

1
Kurt Glastetter