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.