¿Excluir archivos ocultos al buscar con Unix / Linux find?


35

¿Qué opciones necesito usar findpara excluir archivos ocultos?


44
Aparte: la razón por la que no hay un soporte especial para esta tarea es que lo único especial acerca de los archivos nombrados con un '.' es que no se enumeran a lsmenos que se solicite específicamente: son archivos completamente normales en todos los aspectos, es solo que lste permite ignorarlos de forma predeterminada.
dmckee

2
Pregunta: ¿quieres esconder algo como .hidden/visible.txt?
Keith Thompson el

Respuestas:


14

Encontré esto aquí :

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

¿Por qué no solo \( ! -name '.*' \)?
Grawity

@grawity Acabo de encontrar eso, no sé completamente cómo funciona. ¿El suyo no solo ocultaría archivos ocultos, sino también directorios ocultos y todo su contenido y archivos ocultos en subcarpetas?
Jarvin

55
No, no lo haría: / Pero lo \( ! -path '*/.*' \)haría.
Grawity

@grawity Ya, supongo que asumí lo que quería el OP ... Su solución de nombre es probablemente la más cercana a lo que estaban pidiendo.
Jarvin

@ Grawity & Dan: ¿No es (! -path '^. *') ?? sus soluciones ignorarán cualquier archivo que tenga un '.' en cualquier parte del nombre del archivo, como a.exe, b.out, etc ...
Software Mechanic

13

Parece que el patrón de negación global no se conoce bien. Entonces puedes usar:

find . -name "[!.]*"

12

Esto no responde a su pregunta, pero para la tarea de encontrar archivos no ocultos, me gusta dejar encontrar todos los archivos y luego filtrarlos con grep.

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

Similar a su enfoque, pero quizás un poco más simple.


Este fue el único de los revestimientos que funcionó para mí.
entpnerd

7

Pruebe el siguiente finduso:

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

Lo que ignoraría todos los archivos ocultos (archivos y directorios que comienzan con un punto).


1

Escribí un script llamado findnhque creo que maneja ciertos casos extremos mejor que las respuestas a esta pregunta que he podido encontrar en la 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 \) \) "$@"

Por ejemplo, puede encontrar archivos y directorios no ocultos dentro de un directorio oculto especificado explícitamente con un comando como findnh ~/.hiddendir/, que se mostrará ~/.hiddendir/filepero no ~/.hiddendir/.superhiddenfile.


1
Buen bit de codificación. Excepto que, cuando lo intento findnh ~/.hiddendir/, no obtengo nada. Aparte de eso, ¿cómo es esto diferente de ! -path '*/.*'y find … | grep -v '/\.'?
G-Man dice 'reinstalar a Monica' el

1

Si objetivos es findy grep, ripgrepexcluye los archivos ocultos de forma predeterminada, por ejemplo,

rg --files

--files Imprima cada archivo que se buscaría sin realizar realmente la búsqueda.


1

fd

Use fd, una alternativa simple, mucho más rápida y fácil de usar find. Por defecto, esto:

  • Ignora los directorios y archivos ocultos, por defecto.
  • Ignora los patrones de su .gitignore, por defecto.

Verifique el análisis de referencia .


1

Para buscar archivos ocultos:

find -name '[.]*'

Para buscar archivos visibles:

find -name '[!.]*'

Es así de simple.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.