Escludere i file nascosti durante la ricerca con Unix / Linux trovare?


35

Con quali opzioni devo utilizzare findper escludere i file nascosti?


4
A parte: il motivo per cui non esiste un supporto speciale per questa attività è che l' unica cosa speciale dei file denominati con un '.' Iniziale è che non sono elencati da lsse non diversamente richiesto: sono file completamente ordinari sotto tutti gli aspetti, è solo che lsti consente di ignorarli per impostazione predefinita.
dmckee,

2
Domanda: vuoi nascondere qualcosa del genere .hidden/visible.txt?
Keith Thompson,

Risposte:


14

Ho trovato questo qui :

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

Perché non solo \( ! -name '.*' \)?
Grawity

@grawity L'ho appena scoperto, non so del tutto come funzioni. I tuoi non nasconderebbero solo file nascosti, ma directory nascoste e tutti i loro contenuti secondari e file nascosti nelle sottocartelle?
Jarvin,

5
No, non sarebbe: / Ma \( ! -path '*/.*' \)sarebbe.
Grawity

@grawity Ya, immagino di aver fatto un'ipotesi su ciò che voleva l'OP ... La tua soluzione -name è probabilmente la più vicina a ciò che stavano chiedendo.
Jarvin,

@ grawity & Dan: non è vero (! -path '^. *') ?? le tue soluzioni ignoreranno qualsiasi file con un '.' ovunque nel nome del file come a.exe, b.out ecc ....
Software Mechanic,

13

Sembra che il modello di negazione globale non sia ben noto. Quindi puoi usare:

find . -name "[!.]*"

12

Questo non risponde alla tua domanda, ma per il compito di trovare file non nascosti mi piace lasciare che trovi tutti i file quindi filtrali con grep.

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

Simile al tuo approccio ma forse un po 'più semplice.


Questa è stata l'unica delle fodere che ha funzionato per me.
entpnerd

7

Prova il seguente findutilizzo:

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

Che ignorerebbe tutti i file nascosti (file e directory che iniziano con un punto).


1

Ho scritto una sceneggiatura chiamata findnhche credo gestisca alcuni casi limite meglio delle risposte a questa domanda che sono riuscito a trovare sul web.

#!/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 \) \) "$@"

Ad esempio, è possibile trovare file e directory non nascosti all'interno di una directory nascosta specificata in modo esplicito con un comando simile findnh ~/.hiddendir/, che verrà mostrato ~/.hiddendir/filema non ~/.hiddendir/.superhiddenfile.


1
Bel po 'di codifica. Tranne quando provo findnh ~/.hiddendir/, non ottengo nulla. A parte questo, in che cosa differisce da ! -path '*/.*'e find … | grep -v '/\.'?
G-Man dice "Ripristina Monica" il

1

Se il tuo obiettivo è finde grep, ripgrepesclude i file nascosti per impostazione predefinita, ad es

rg --files

--files Stampa ogni file che verrebbe cercato senza eseguire effettivamente la ricerca.


1

fd

Utilizzare fd, un'alternativa semplice, molto più veloce e user-friendly afind . Per impostazione predefinita, esso:

  • Ignora directory e file nascosti, per impostazione predefinita.
  • Ignora i modelli dal tuo .gitignore, per impostazione predefinita.

Controlla l' analisi del benchmark .


1

Per trovare file nascosti:

find -name '[.]*'

Per trovare i file visibili:

find -name '[!.]*'

È così semplice

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.