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


35

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


4
余談:このタスクに特別なサポートがない理由は、先頭に「。」が付いたファイルについて特別なことだけだからです。ls特に要求されない限り、リストされていないというlsことです。それらはすべての点で完全に普通のファイルであり、デフォルトでそれらを無視することができます。
dmckee

2
質問:次のようなものを非表示にします.hidden/visible.txtか?
キーストンプソン

回答:


14

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

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

どうして\( ! -name '.*' \)
-grawity

@grawity私はちょうどそれがどのように機能するかを完全には知りません。隠しファイルだけでなく、隠しディレクトリとそのすべてのサブコンテンツとサブフォルダ内の隠しファイルを隠しますか?
ジャービン

5
いいえ、そうではありません:/しかし、\( ! -path '*/.*' \)そうです。
-grawity

@grawity Ya、私はOPが何を望んでいるかについて仮定したと思います...あなたの名前の解決策はおそらく彼らが求めていたものに最も近いでしょう。
ジャービン

@ grawity&Dan:そうではありませんか(!-path '^。*')?? ソリューションは「。」を持つファイルを無視します どこでもA.EXEのようなファイル名で、B.OUTなど...
メカニックソフトウェア

13

否定のglobパターンはあまり知られていないようです。以下を使用できます。

find . -name "[!.]*"

12

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

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

あなたのアプローチに似ていますが、おそらく少しシンプルです。


これは私のために働いた唯一のライナーの一つでした。
entpnerd

7

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

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

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


1

私はfindnh、ウェブ上で見つけることができたこの質問に対する答えよりも、特定のエッジケースをうまく処理できると信じているというスクリプトを書きました。

#!/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
ちょっとしたコーディング。を除いて、私がしようとするとfindnh ~/.hiddendir/、何も得られません。それ以外に、これは! -path '*/.*'find … | grep -v '/\.'どう違いますか?
Gマンは「Reinstate Monica」と14年

1

あなたが目指していた場合にあるfindgrepripgrepデフォルトでは例えば隠しファイルを除外しません

rg --files

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


1

fd

を使用しますfd。シンプルで、はるかに高速で、ユーザーフレンドリーな代替手段findです。デフォルトでは:

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

ベンチマーク分析を確認してください。


1

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

find -name '[.]*'

表示可能なファイルを見つけるには:

find -name '[!.]*'

とても簡単です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.