Páginas

9 de abril de 2015

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 ;)


bash


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:

exclusion-chmod-bash


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 ;)


i-love-bin-bash_by-kzkggaara







from Desde Linux http://feedproxy.google.com/~r/UsemosLinux/~3/VInpqReTAH0/

via IFTTT