Noticia Exclusión a tareas que ejecutes en Bash

A veces necesitamos ejecutar un comando, por ejemplo cambiar los permisos de una carpeta y su contenido, no obstante deseamos que NO se aplique este cambio a un archivo en específico, o a una carpeta en específica… aún cuando se encuentre dentro de la carpeta sobre la cual ejecutamos el comando.

Para que se entienda mejor, tengo una carpeta (archivos) y dentro de ella 4 archivos (doc.txt , file.mp4, lista.txt y tesis.doc), deseo cambiar el permiso de esos archivos para que solo el propietario pueda acceder, hacer eso excepto con lista.txt, que quiero todos puedan ver, o sea, que no cambien sus permisos.

Resumiendo:

  • doc.txt , file.mp4 y tesis.doc SOLO podrán ser vistos por el propietario
  • lista.txt podrá ser visto por todos, o sea, no quiero que sus permisos varíen.

Para lograr esto puedo cambiar los permisos a todos los archivos y luego, además cambiarle los permisos a lista.txt para que los tenga como antes. Esto serían dos líneas… pero, como casi siempre en Linux, hay una forma de optimizar ;)



Veamos cómo:

  1. Para cambiar los permisos a que solo el propietario pueda acceder usaremos: chmod 700
  2. Para que le cambie los permisos en todos los archivos de esa carpeta (recuerdo que se llama: archivos) usaremos: archivos/
  3. Para excluir el archivo lista.txt usaremos: /!(lista.txt)

O sea el comando final sería:

chmod 700 archivos/!(lista.txt)

Así de simple, aquí les dejo un screenshot de los permisos antes de los archivos de esa carpeta, la ejecución del comando, y luego como quedan los permisos:


En caso de que queramos excluir más de un archivo, por ejemplo lista.txt y además tesis.doc , podemos separar esos archivos con | … o sea:

chmod 700 archivos/!(lista.txt|tesis.doc)

¿A que es simple? :D

Bueno nada más que agregar, es una sencillez pero que cuando se trabaja con grandes volúmenes de información, puede salvar el día ;)




VInpqReTAH0


Continúar leyendo...