{"id":582,"date":"2007-08-29T05:38:53","date_gmt":"2007-08-29T12:38:53","guid":{"rendered":"http:\/\/www.gubatron.com\/blog\/2007\/08\/29\/linuxcomo-copiar-un-archivo-a-multiples-ubicaciones-con-un-solo-comando\/"},"modified":"2007-08-29T05:38:53","modified_gmt":"2007-08-29T12:38:53","slug":"linuxcomo-copiar-un-archivo-a-multiples-ubicaciones-con-un-solo-comando","status":"publish","type":"post","link":"https:\/\/www.gubatron.com\/blog\/linuxcomo-copiar-un-archivo-a-multiples-ubicaciones-con-un-solo-comando\/","title":{"rendered":"Linux: Como copiar un archivo a multiples ubicaciones con un solo comando"},"content":{"rendered":"<p>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.<\/p>\n<p>Yendo a un ejemplo concreto, El splash screen de FrostWire vive en varios lugares:<\/p>\n<pre>\nfind . | grep splash | grep -v svn\n.\/lib\/themes\/pinstripes\/default_splash.png\n.\/lib\/themes\/pinstripes\/splash.png\n.\/gui\/com\/limegroup\/gnutella\/gui\/images\/splash.png\n.\/gui\/com\/limegroup\/gnutella\/gui\/images\/default_splash.png\n.\/gui\/com\/limegroup\/gnutella\/gui\/images\/splashpro.png\n.\/gui\/com\/limegroup\/gnutella\/gui\/images\/default_splash_pro.png\n<\/pre>\n<p>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&#8230; que hacemos? <strong>un for<\/strong><\/p>\n<p>Mi archivo nuevo se llama <strong>splash_4.13.3.png<\/strong> y quiero pegarlo automaticamente sin que se me olvide ninguna URL en todas esas ubicaciones, con esos nombres.<\/p>\n<p>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 <strong>cp splash_4.13.3.png $elemento<\/strong><\/p>\n<p>Veamos:<\/p>\n<pre>\n\nfor elemento in `find . | grep splash | grep -v svn`; do cp splash_4.13.3.png $elemento; done;\n\n\n\n\n\n<\/pre>\n<p>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.<\/p>\n<p>Espero que les sea de utilidad.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[30,43],"tags":[],"class_list":["post-582","post","type-post","status-publish","format-standard","hentry","category-geeklife","category-linux"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5Unzf-9o","jetpack-related-posts":[{"id":1336,"url":"https:\/\/www.gubatron.com\/blog\/compiling-ghost-white-crab-on-linux-x86_64-ubuntu-linux\/","url_meta":{"origin":582,"position":0},"title":"Compiling Ghost White Crab on Linux x86_64 Ubuntu Linux","author":"gubatron","date":"July 26, 2009","format":false,"excerpt":"Compiling this software is usually just a matter of running 'make', but if you try to do so in Ubuntu 64bit, you'll encounter the following error on the config_test.log file skipping incompatible \/usr\/lib\/gcc\/x86_64-linux-gnu\/4.3.3\/libgcc.a when searching for -lgcc To solve this issue just do the following: apt-get install libc6-dev-i386 This makes\u2026","rel":"","context":"In &quot;Geeklife&quot;","block_context":{"text":"Geeklife","link":"https:\/\/www.gubatron.com\/blog\/category\/geeklife\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":85,"url":"https:\/\/www.gubatron.com\/blog\/2-programitas-utiles-mientras-desarrollas-en-linux\/","url_meta":{"origin":582,"position":1},"title":"2 programitas utiles mientras desarrollas en Linux","author":"gubatron","date":"December 29, 2004","format":false,"excerpt":"Para los desarrolladores que utilizan lenguajes de programacion como Perl, o PHP, a continuacion, un programita bien util. Supon que tienes un archivo .php donde tienes definidas un monton de funciones. Y no te acuerdas que funciones estaban ahi, lo mas probable es que tengas que abrir el archivo y\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":63,"url":"https:\/\/www.gubatron.com\/blog\/vaciando-el-buffer\/","url_meta":{"origin":582,"position":2},"title":"Vaciando el Buffer","author":"gubatron","date":"December 10, 2004","format":false,"excerpt":"Este post es un poco para desahogar algunos consejos y tips que he querido tener anotados, y que mejor lugar que el blog, donde mis notas personales pueden ayudar a otros. En mi \u00faltimas asignaciones profesionales he tenido que trabajar en ambientes 100% Linux, esto me ha hecho refrescar viejas\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":689,"url":"https:\/\/www.gubatron.com\/blog\/whats-new-in-frostwire-4135\/","url_meta":{"origin":582,"position":3},"title":"What&#8217;s new in FrostWire 4.13.5","author":"gubatron","date":"February 28, 2008","format":false,"excerpt":"FOR IMMEDIATE RELEASE: FrostWire 4.13.5 is now available for MS Windows, Mac OSX and Linux. Major updates improve network bootstraping and peer discovery. 4.13.5 includes improvements on the Chatroom tab, Audio Previews and more. Other improvements have taken place for the FrostWire build process (for developers this means true One-Step\u2026","rel":"","context":"In &quot;Creative Commons&quot;","block_context":{"text":"Creative Commons","link":"https:\/\/www.gubatron.com\/blog\/category\/creative-commons\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":130,"url":"https:\/\/www.gubatron.com\/blog\/linux-poder-de-bash-grep-awk\/","url_meta":{"origin":582,"position":4},"title":"Linux: Poder de Bash, Grep, AWK","author":"gubatron","date":"April 3, 2005","format":false,"excerpt":"Si eres un pipiri en linux, te vas a aburrir con esto. Ya con 2 meses o quizas un poco mas de vivir 100% linux, empiezo a probar por mi mismo cosas que recuerdo haber visto en los .bash_history de la cuenta del administrador en mi universidad, ya hace mas\u2026","rel":"","context":"In &quot;Gubatron&quot;","block_context":{"text":"Gubatron","link":"https:\/\/www.gubatron.com\/blog\/category\/gubatron\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":513,"url":"https:\/\/www.gubatron.com\/blog\/bash-alias-svn_diff_counter-count-lines-added-and-removed\/","url_meta":{"origin":582,"position":5},"title":"Bash Alias &#8211; &#8220;svn_diff_counter&#8221;: Count lines added and removed","author":"gubatron","date":"April 30, 2007","format":false,"excerpt":"I love to know how many lines I've added and deleted before making a commit. This is why I created this alias: alias svn_diff_counter='svn diff | egrep \"^[+|-].*\" | egrep -v \"(+++)|(---)\" > .tmp_diff_counter ; added=`egrep \"(^+)\" .tmp_diff_counter | wc -l`; removed=`egrep \"(^-)\" .tmp_diff_counter | wc -l`; rm .tmp_diff_counter; echo\u2026","rel":"","context":"In &quot;Code&quot;","block_context":{"text":"Code","link":"https:\/\/www.gubatron.com\/blog\/category\/code\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/comments?post=582"}],"version-history":[{"count":0,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/posts\/582\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/media?parent=582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/categories?post=582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gubatron.com\/blog\/wp-json\/wp\/v2\/tags?post=582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}