特定のサブパスを除くワイルドカードディレクトリでファイルを検索する

特定のサブパスを除くワイルドカードディレクトリでファイルを検索する

次のディレクトリ(およびファイル)構造を考えてみましょう。

mkdir testone
mkdir testtwo
mkdir testone/.svn
mkdir testtwo/.git
touch testone/fileA
touch testone/fileB
touch testone/fileC
touch testone/.svn/fileA1
touch testone/.svn/fileB1
touch testone/.svn/fileC1
touch testtwo/fileD
touch testtwo/fileE
touch testtwo/fileF
touch testtwo/.git/fileD1
touch testtwo/.git/fileE1
touch testtwo/.git/fileF1

これら2つのディレクトリにあるすべてのファイルを印刷/検索したいが、サブディレクトリおよび/.gitまたは.svn

find test*

...これにより、すべてのファイルがダンプされます。

私がこれを行うと(例えば、ワイルドカードを含む検索検索で隠しファイルとディレクトリを除外/無視する方法は?):

$ find test* -path '.svn' -o -prune 
testone
testtwo
$ find test* -path '*/.svn/*' -o -prune 
testone
testtwo

...その後、ダンプの最上位ディレクトリだけがインポートされ、ファイル名はインポートされません。

findgrepパイピングなしでこのような検索/リストfindを独自に実行できますかfind test* | grep -v '\.svn' | grep -v '\.git'

ベストアンサー1

コマンドは、find指定されたパスが一致しない場合に実行する操作を指しません。ドットで始まるすべてを除いて残りを印刷するには、次のようにします。

find test* -path '*/.*' -prune -o -print

したがって、そのパスに一致するすべてのアイテムを削除し、一致しないアイテムを印刷します。

出力例:

testone
testone/fileC
testone/fileB
testone/fileA
testtwo
testtwo/fileE
testtwo/fileF
testtwo/fileD

ドットで始まるコンテンツを除外し、他のコンテンツを除外するには、次の手順を実行します.svn.git

find test* \( -path '*/.svn' -o -path '*/.git' \) -prune -o -print

この例では、同じ出力が生成されます。

最上位ディレクトリを除外するには、-mindepth 1次のものを追加できます。

find test* -mindepth 1 -path '*/.*' -prune -o -print

これは作る

testone/fileC
testone/fileB
testone/fileA
testtwo/fileE
testtwo/fileF
testtwo/fileD

おすすめ記事