Linux: Como copiar un archivo a multiples ubicaciones con un solo comando

Aprovecho la ocasion para ilustrar un poco el poder del bash a los amigos que recien se unen al mundo de linux. Muchas veces tienes que hacer operaciones en las cuales tienes que tocar multiples archivos, por ejemplo, remplazar un archivo en varios lugares.

Yendo a un ejemplo concreto, El splash screen de FrostWire vive en varios lugares:

find . | grep splash | grep -v svn
./lib/themes/pinstripes/default_splash.png
./lib/themes/pinstripes/splash.png
./gui/com/limegroup/gnutella/gui/images/splash.png
./gui/com/limegroup/gnutella/gui/images/default_splash.png
./gui/com/limegroup/gnutella/gui/images/splashpro.png
./gui/com/limegroup/gnutella/gui/images/default_splash_pro.png

Todos esos archivos son un mismo archivo con diferente nombre. Hoy tengo que actualizar el splash screen para que aparezca un nuevo numero de version, y es un fastidio hacer cp manualmente para cada uno de ellos… que hacemos? un for

Mi archivo nuevo se llama splash_4.13.3.png y quiero pegarlo automaticamente sin que se me olvide ninguna URL en todas esas ubicaciones, con esos nombres.

Lo que hacemos es que volvemos a hacer ese grep, y lo metemos en una lista, y luego recorremos esa lista y para cada elemento de la lista hacemos cp splash_4.13.3.png $elemento

Veamos:


for elemento in `find . | grep splash | grep -v svn`; do cp splash_4.13.3.png $elemento; done;





Para los amigos nuevos con bash, el uso de las comillas simples hacia atras ejecuta el string. Luego el for se ejecuta en cada uno de los elementos de esa lista generada por el find | grep.

Espero que les sea de utilidad.

Leave a Reply

Your email address will not be published. Required fields are marked *