Excluir archivos de directorios ocultos pero no archivos ocultos (en directorios no ocultos) de los resultados de búsqueda

Excluir archivos de directorios ocultos pero no archivos ocultos (en directorios no ocultos) de los resultados de búsqueda

Dada la siguiente estructura de directorios:

$ tree --noreport dir

dir
├── fileA
├── .hiddenfileA
├── .hiddendirA
|   ├── .hiddenfileB
│   ├── fileC
│   └── fileD
└── dirA
    ├── .hiddenfileC
    ├── fileE
    └── fileF

El requisito es realizar una llamada para buscar para que los archivos de directorios ocultos pero no los archivos ocultos (en directorios no ocultos) se excluyan del resultado.

El rendimiento esperado debería ser algo similar a:

./.hiddenfileA
./dirA/.hiddenfileC
./dirA/fileE
./dirA/fileF
./fileA

Investigué un poco y encontréaquíinformación que me llevó a crear la siguiente llamada afind

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

Pero esta solución tiene el inconveniente de que se salta directorios ocultos.y archivos.

Respuesta1

Pode los directorios ocultos y limite los resultados a archivos:

find . -type d -name '.?*' -prune -o -type f -print

Como lo sugierejthill, es posible que prefieras filtrar directorios, lo que daría como resultado que se muestren archivos, enlaces, etc.:

find . -type d -name '.?*' -prune -o ! -type d -print

Respuesta2

El comando que tienes está muy cerca de funcionar. Usar

find . -type f ! -path '*/.*/*' -print
  • El patrón de ruta, */.*/*busca un /. (lo que implica un nombre de segmento que comienza con.) seguido(eventualmente)pora  / - entonces el nombre del segmento que comienza con. no puede ser el último (el nombre del archivo); es decir, debe ser un nombre de directorio.
  • -pathutiliza patrones de expansión de nombres de archivos; también conocidos como globos o comodines. Entonces no necesitas poner \antes ..
  • No lo use -notsi desea portabilidad a sistemas que no sean GNU. El uso de  ! para representar "no" está especificado por POSIX y funciona en todas las versiones find (incluso BSD, Solaris, etc., y sistemas antiguos).

información relacionada