{"id":38928,"date":"2019-10-31T22:26:48","date_gmt":"2019-10-31T19:26:48","guid":{"rendered":"https:\/\/prohoster.info\/blog\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix\/"},"modified":"2019-10-31T22:26:48","modified_gmt":"2019-10-31T19:26:48","slug":"komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix","title":{"rendered":"Equipo cp: copia correcta de carpetas con archivos en *nix","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Equipo cp: copia correcta de carpetas con archivos en *nix\" src=\"\/wp-content\/uploads\/2019\/10\/44fed4a64417950ae1f2307d2c9c92ca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn este art\u00edculo se revelar\u00e1n algunas cosas no tan evidentes relacionadas con el uso de <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0\">comodines<\/a><\/noindex> al copiar, el comportamiento ambiguo del comando <code>cp<\/code> al copiar, as\u00ed como formas que permiten copiar correctamente una gran cantidad de archivos sin omisiones ni errores.<\/p>\n<p>Supongamos que necesitamos copiar todo de la carpeta \/source a la carpeta \/target.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLo primero que se nos ocurre es:<\/p>\n<pre><code class=\"bash\">cp \/source\/* \/target<\/code><\/pre>\n<p>\nInmediatamente corregimos este comando a:<\/p>\n<pre><code class=\"bash\">cp -a \/source\/* \/target<\/code><\/pre>\n<p>\nClave <code>-a<\/code> agregar\u00e1 la copia de todos los atributos, permisos y a\u00f1adir\u00e1 recursi\u00f3n. Cuando no se requiere una reproducci\u00f3n exacta de los permisos, basta con la opci\u00f3n <code>-r<\/code>.<\/p>\n<p>Despu\u00e9s de la copia, descubrimos que no se copiaron todos los archivos; se ignoraron archivos que comienzan con un punto, como:<\/p>\n<p><code>.perfil<br \/>\n.local<br \/>\n.mc<\/code><br \/>\ny cosas similares.<\/p>\n<p>\u00bfPor qu\u00e9 ocurri\u00f3 esto?<\/p>\n<p>Porque los comodines son procesados por el shell (<code>bash<\/code> en un caso t\u00edpico). Por defecto, bash ignora todos los archivos que comienzan con un punto, ya que los considera ocultos. Para evitar este comportamiento, debemos cambiarlo <code>bash<\/code> usando el comando:<\/p>\n<pre><code class=\"bash\">shopt -s dotglob<\/code><\/pre>\n<p>\nPara que este cambio de comportamiento se mantenga despu\u00e9s de reiniciar, se puede crear un archivo wildcard.sh con este comando en la carpeta <code>\/etc\/profile.d<\/code> (quiz\u00e1s en su distribuci\u00f3n la carpeta sea diferente).<\/p>\n<p>Y si en el directorio fuente no hay archivos, el shell no podr\u00e1 sustituir nada por el asterisco, y la copia tambi\u00e9n terminar\u00e1 con un error. Para prevenir esta situaci\u00f3n, hay opciones <code>failglob<\/code> y <code>nullglob<\/code>. Necesitaremos configurar <code>failglob<\/code>, que no permitir\u00e1 que el comando se ejecute. <code>nullglob<\/code> no servir\u00e1, ya que convierte una cadena con comodines sin coincidencias en una cadena vac\u00eda (de longitud cero), lo que causar\u00e1 un error para <code>cp<\/code> .<\/p>\n<p>Sin embargo, si en la carpeta hay miles de archivos o m\u00e1s, vale la pena abandonar por completo el enfoque de usar comodines. La raz\u00f3n es que <code>bash<\/code> expande los comodines en una l\u00ednea de comando muy larga como:<\/p>\n<pre><code class=\"bash\">cp -a \/souce\/a \/source\/b \/source\/c \u2026\u2026 \/target<\/code><\/pre>\n<p>\nHay un l\u00edmite en la longitud de la l\u00ednea de comando, que podemos conocer usando el comando:<\/p>\n<pre><code class=\"bash\">getconf ARG_MAX<\/code><\/pre>\n<p>\nObtendremos la longitud m\u00e1xima de la l\u00ednea de comando en bytes:<\/p>\n<pre><code class=\"bash\">2097152<\/code><\/pre>\n<p>\nO:<\/p>\n<pre><code class=\"bash\">xargs --show-limits<\/code><\/pre>\n<p>\nObtendremos algo como:<\/p>\n<pre><code class=\"bash\">\u2026.\nLongitud m\u00e1xima del comando que podr\u00edamos usar: 2089314\n\u2026.<\/code><\/pre>\n<p>\nAs\u00ed que, evitemos completamente el uso de comodines.<\/p>\n<p>Simplemente escribamos<\/p>\n<pre><code class=\"bash\">cp -a \/source \/target<\/code><\/pre>\n<p>\nY aqu\u00ed nos encontramos con ambig\u00fcedades en el comportamiento <code>cp<\/code>. Si la carpeta \/target no existe, obtendremos lo que necesitamos.<\/p>\n<p>Sin embargo, si la carpeta target existe, los archivos se copiar\u00e1n en la carpeta \/target\/source.<\/p>\n<p>No siempre podemos eliminar la carpeta \/target de antemano, ya que puede contener archivos que necesitamos y nuestro objetivo, supongamos, es complementar los archivos en \/target con archivos de \/source.<\/p>\n<p>Si las carpetas de origen y destino tuviesen el mismo nombre, por ejemplo, si estuvi\u00e9ramos copiando de \/source a \/home\/source, podr\u00edamos usar el comando:<\/p>\n<pre><code class=\"bash\">cp -a \/source \/home<\/code><\/pre>\n<p>\nY despu\u00e9s de la copia, los archivos en \/home\/source estar\u00edan complementados con los archivos de \/source.<\/p>\n<blockquote><p>Aqu\u00ed hay un acertijo l\u00f3gico: podemos complementar los archivos en el directorio de destino, si las carpetas tienen el mismo nombre, pero si son diferentes, la carpeta de origen ser\u00e1 colocada dentro del destino. \u00bfC\u00f3mo copiar archivos de \/source a \/target usando cp sin comodines?<\/p><\/blockquote>\n<p>\nPara sortear esta limitaci\u00f3n perjudicial, utilizamos una soluci\u00f3n no evidente:<\/p>\n<pre><code class=\"bash\">cp -a \/source\/. \/target<\/code><\/pre>\n<p>\nLos que est\u00e1n bien familiarizados con DOS y Linux ya lo han entendido todo: dentro de cada carpeta hay 2 carpetas invisibles \u00ab.\u00bb y \u00ab..\u00bb, que son pseudocarpetas que hacen referencia al directorio actual y al superior.<\/p>\n<ul>\n<li>Al copiar <code>cp<\/code> verifica la existencia y trata de crear \/target.<\/li>\n<li>Tal directorio existe y es \/target<\/li>\n<li>Los archivos de \/source se han copiado a \/target correctamente.<\/li>\n<\/ul>\n<p>\nAs\u00ed que vamos a enmarcar con un borde grueso en nuestra mente o en la pared:<\/p>\n<blockquote>\n<pre><code class=\"bash\">cp -a \/source\/. \/target<\/code><\/pre>\n<\/blockquote>\n<p>\nEl comportamiento de este comando es definitivo. Todo funcionar\u00e1 sin errores independientemente de si tienes un mill\u00f3n de archivos o ninguno.<\/p>\n<h3>Conclusiones<\/h3>\n<p>\nSi necesitas copiar <b>cargas de trabajo dejar\u00e1n de funcionar!<\/b> archivos de una carpeta a otra, no uses comodines, en su lugar es mejor usar <code>cp<\/code> en combinaci\u00f3n con un punto al final de la carpeta de origen. Esto copiar\u00e1 todos los archivos, incluidos los ocultos, y no fallar\u00e1 con millones de archivos o la ausencia total de archivos.<\/p>\n<h4>P\u00f3scrito<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vmspike\/\" class=\"user_link\">vmspike<\/a><\/noindex> propuso una variante similar del comando:<\/p>\n<pre><code class=\"bash\">cp -a -T \/source \/target<\/code><\/pre>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/oz_alex\/\" class=\"user_link\">Oz_Alex<\/a><\/noindex><\/p>\n<pre><code class=\"bash\">cp -aT \/source \/target<\/code><\/pre>\n<p>\nATENCI\u00d3N: el caso de la letra <code>T<\/code> importa. Si te confundes, obtendr\u00e1s un completo desastre: la direcci\u00f3n de copia cambiar\u00e1.<br \/>\nAgradecimientos:<\/p>\n<ul>\n<li>A la empresa <noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/\">RUVDS.COM<\/a><\/noindex> por el apoyo y la oportunidad de publicar en su blog en Habr.<\/li>\n<li>Por la imagen <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/neoprosveschenie\">TripletConcept<\/a><\/noindex>. La imagen es muy grande y detallada, puedes abrirla en una ventana separada.<\/li>\n<\/ul>\n<p>\n<b>P.D.<\/b> Env\u00eda errores reportados por mensaje privado. Aumentar\u00e9 tu karma por esto.<\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/ru-rub\/#order\"><img decoding=\"async\" alt=\"Equipo cp: copia correcta de carpetas con archivos en *nix\" src=\"\/wp-content\/uploads\/2019\/10\/67131836f7fb6cf7827541e9dc607513.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ruvds\/blog\/471092\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0432\u0435\u0449\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c wildcards \u043f\u0440\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u043d\u0435\u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b cp \u043f\u0440\u0438 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0435\u0437 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043e\u0432 \u0438 \u0432\u044b\u043b\u0435\u0442\u043e\u0432. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 \/source \u0432 \u043f\u0430\u043f\u043a\u0443 \/target. \u041f\u0435\u0440\u0432\u043e\u0435, \u0447\u0442\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043d\u0430 \u0443\u043c \u044d\u0442\u043e: cp \/source\/* \/target \u0421\u0440\u0430\u0437\u0443 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29205,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38928","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u043e\u043c\u0430\u043d\u0434\u0430 cp: \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043e\u043a \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432 *nix | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:26:48+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:26:48+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Comando cp: copia correcta de carpetas con archivos en *nix | ProHoster","description":"En este art\u00edculo se revelar\u00e1n.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u043e\u043c\u0430\u043d\u0434\u0430 cp: \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043e\u043a \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0432 *nix | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044b.","og:url":"https:\/\/prohoster.info\/es\/blog\/administrirovanie\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:26:48+00:00","article:modified_time":"2019-10-31T19:26:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38928","title":null,"description":null,"keywords":null,"keyphrases":{"focus":[],"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 23:59:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:00:26","updated":"2026-08-11 12:50:30","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/38928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=38928"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/38928\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/29205"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=38928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=38928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=38928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}