¿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.