¿Cómo debo buscar todos los archivos ocultos?

22

Quiero realizar alguna acción (por ejemplo chown) en todos los archivos ocultos en un directorio.

Sé que esta no.* es una buena idea porque también encontrará los directorios actuales y principales (sé que no funcionará y otros comandos, incluidos y , felizmente surtirán efecto)...rm...chownchmod

¡Pero todos mis archivos ocultos tienen nombres diferentes!

¿Cómo debo buscar todos los archivos ocultos al excluir .y ..?

Zanna
fuente

Respuestas:

20

Puede usar el siguiente extglobpatrón:

.@(!(.|))
  • .coincide con un literal .al principio

  • @()es un extglobpatrón, coincidirá con uno de los patrones en el interior, ya que solo tenemos un patrón dentro, elegirá

  • !(.|)es otro extglobpatrón (anidado), que coincide con cualquier archivo sin o con uno .; Como ya coincidimos .al inicio, todo este patrón coincidirá con todos los archivos que comiencen con .excepción de .y ...

extglobestá habilitado en sesiones interactivas de bashforma predeterminada en Ubuntu. Si no, habilítelo primero:

shopt -s extglob

Ejemplo:

$ echo .@(!(.|))
.bar .foo .spam
heemayl
fuente
¡Esto es claramente una cosa asombrosa que necesito aprender! Gracias por enseñar
Zanna
@Zanna Me alegro de poder ayudar :)
heemayl
2
¿Cuál es el propósito de la @()? Simple .!(.|)parece funcionar de manera idéntica.
Kyle Strand
1
Sé que esto es viejo, pero tengo la misma pregunta que @KyleStrand. En mis pruebas, !(.|)funciona igual. ¿Hay algún propósito detrás @()en este contexto?
Paddy Landau
¿Es el personaje del bang una negación? No se menciona, y al leer su explicación, tengo la impresión de que el patrón coincide con punto y doble punto, pero usted describe claramente los archivos que coinciden con un punto inicial, excepto solo esos dos.
usuario desconocido
20
 GLOBIGNORE=".:.."

para esconder el. y .. directorios. Esto también establece la dotglobopción: *coincide con archivos ocultos y no ocultos.

También puedes hacer

shopt -s dotglob

Gilles :)

Rinzwind
fuente
9

Puedes usar un findcomando aquí. Por ejemplo algo como

find -type f -name ".*" -exec chmod 775 {} \;

Esto encontrará archivos ocultos y cambiará los permisos.


Edite para incluir el comentario de @gerrit:

find -type f -maxdepth 1 -name ".*" -exec chmod 775 {} \;

Esto limitará la búsqueda en el directorio actual en lugar de buscar de forma recursiva.

Wayne_Yux
fuente
44
Es posible que desee agregar un -maxdepth 1aquí para que coincida más estrechamente con el comportamiento en la pregunta y las otras respuestas.
gerrit