{"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\/it\/blog\/administrirovanie\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix","title":{"rendered":"Comando cp: corretta copia di cartelle con file in *nix","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Comando cp: corretta copia di cartelle con file in *nix\" src=\"\/wp-content\/uploads\/2019\/10\/44fed4a64417950ae1f2307d2c9c92ca.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn questo articolo verranno rivelate alcune cose non ovvie legate all'uso <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\">dei wildcard<\/a><\/noindex> nella copia, il comportamento ambiguo del comando <code>cp<\/code> durante la copia, e anche i modi per copiare correttamente un enorme numero di file senza salti e crash.<\/p>\n<p>Supponiamo di dover copiare tutto dalla cartella \/source nella cartella \/target.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nLa prima cosa che viene in mente \u00e8:<\/p>\n<pre><code class=\"bash\">cp \/source\/* \/target<\/code><\/pre>\n<p>\nCorreggiamo subito questo comando in:<\/p>\n<pre><code class=\"bash\">cp -a \/source\/* \/target<\/code><\/pre>\n<p>\nChiave <code>-a<\/code> aggiunger\u00e0 la copia di tutti gli attributi, i permessi e aggiunger\u00e0 la ricorsivit\u00e0. Quando non \u00e8 necessaria una riproduzione esatta dei permessi, basta la chiave <code>-r<\/code>.<\/p>\n<p>Dopo la copia, scopriremo che non tutti i file sono stati copiati: alcuni file che iniziano con un punto sono stati ignorati come:<\/p>\n<p><code>.profilo<br \/>\n.locale<br \/>\n.mc<\/code><br \/>\ne simili.<\/p>\n<p>Perch\u00e9 \u00e8 successo questo?<\/p>\n<p>Perch\u00e9 i wildcard vengono gestiti dalla shell (<code>bash<\/code> di norma). Per default, bash ignorer\u00e0 tutti i file che iniziano con un punto, poich\u00e9 li interpreta come nascosti. Per evitare questo comportamento, dovremo modificare il comportamento <code>bash<\/code> utilizzando il comando:<\/p>\n<pre><code class=\"bash\">shopt -s dotglob<\/code><\/pre>\n<p>\nPer mantenere questa modifica del comportamento dopo il riavvio, si pu\u00f2 creare un file wildcard.sh con questo comando nella cartella <code>\/etc\/profile.d<\/code> (potrebbe esserci una cartella diversa nel tuo distro).<\/p>\n<p>E se nella cartella sorgente non ci sono file, la shell non potr\u00e0 sostituire nulla al posto dell'asterisco e la copia terminer\u00e0 con un errore. Per evitare questa situazione ci sono opzioni <code>failglob<\/code> e <code>nullglob<\/code>. Dobbiamo impostare <code>failglob<\/code>, che impedir\u00e0 l'esecuzione del comando. <code>nullglob<\/code> non va bene, poich\u00e9 trasforma la stringa con i wildcard senza corrispondenza in una stringa vuota (di lunghezza zero), il che per <code>cp<\/code> causer\u00e0 un errore.<\/p>\n<p>Tuttavia, se ci sono migliaia di file nella cartella, vale la pena rinunciare all'approccio con i wildcard. Il fatto \u00e8 che <code>bash<\/code> espande i wildcard in una riga di comando molto lunga simile a:<\/p>\n<pre><code class=\"bash\">cp -a \/source\/a \/source\/b \/source\/c \u2026\u2026 \/target<\/code><\/pre>\n<p>\nC'\u00e8 un limite alla lunghezza della riga di comando che possiamo scoprire usando il comando:<\/p>\n<pre><code class=\"bash\">getconf ARG_MAX<\/code><\/pre>\n<p>\nOttenendo la lunghezza massima della riga di comando in byte:<\/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>\nOtterremo qualcosa come:<\/p>\n<pre><code class=\"bash\">\u2026.\nLunghezza massima del comando che potremmo effettivamente usare: 2089314\n\u2026.<\/code><\/pre>\n<p>\nQuindi, evitiamo di usare del tutto i wildcard.<\/p>\n<p>Scriviamo semplicemente<\/p>\n<pre><code class=\"bash\">cp -a \/source \/target<\/code><\/pre>\n<p>\nE qui ci imbattiamo in un comportamento ambiguo. <code>cp<\/code>Se la cartella \/target non esiste, otterremo ci\u00f2 di cui abbiamo bisogno.<\/p>\n<p>Tuttavia, se la cartella target esiste, i file saranno copiati nella cartella \/target\/source.<\/p>\n<p>Non sempre possiamo rimuovere in anticipo la cartella \/target, poich\u00e9 potrebbero esserci file di cui abbiamo bisogno e il nostro obiettivo, ad esempio, \u00e8 quello di integrare i file in \/target con i file di \/source.<\/p>\n<p>Se le cartelle di origine e di destinazione avessero lo stesso nome, per esempio, se copiassimo da \/source in \/home\/source, potremmo utilizzare il comando:<\/p>\n<pre><code class=\"bash\">cp -a \/source \/home<\/code><\/pre>\n<p>\nE dopo la copia, i file in \/home\/source sarebbero stati integrati con i file di \/source.<\/p>\n<blockquote><p>Ecco un rompicapo logico: possiamo integrare i file nella directory di destinazione se le cartelle hanno lo stesso nome, ma se sono diverse, la cartella di origine sar\u00e0 posizionata all'interno della destinazione. Come copiare i file da \/source a \/target usando cp senza wildcard?<\/p><\/blockquote>\n<p>\nPer superare questa limitazione dannosa utilizziamo una soluzione poco evidente:<\/p>\n<pre><code class=\"bash\">cp -a \/source\/. \/target<\/code><\/pre>\n<p>\nColoro che sono ben familiari con DOS e Linux hanno gi\u00e0 capito tutto: all'interno di ogni cartella ci sono 2 cartelle invisibili \u00ab.\u00bb e \u00ab..\u00bb, che fungono da collegamenti simbolici alla directory corrente e a quella superiore.<\/p>\n<ul>\n<li>Quando si copia <code>cp<\/code> verifica l'esistenza e tenta di creare \/target\/.<\/li>\n<li>Tale directory esiste ed \u00e8 \/target<\/li>\n<li>I file da \/source sono stati copiati correttamente in \/target.<\/li>\n<\/ul>\n<p>\nQuindi, appuntiamolo nella nostra memoria o sul muro in grassetto:<\/p>\n<blockquote>\n<pre><code class=\"bash\">cp -a \/source\/. \/target<\/code><\/pre>\n<\/blockquote>\n<p>\nIl comportamento di questo comando \u00e8 inequivocabile. Tutto funzioner\u00e0 senza errori, indipendentemente dal fatto che tu abbia un milione di file o nessuno.<\/p>\n<h3>Conclusioni<\/h3>\n<p>\nSe \u00e8 necessario copiare <b>tutti<\/b> i file da una cartella all'altra, non utilizziamo wildcard, al loro posto \u00e8 meglio usare <code>cp<\/code> in combinazione con un punto alla fine della cartella di origine. Questo copier\u00e0 tutti i file, compresi quelli nascosti, e non si fermer\u00e0 con milioni di file o in totale assenza di file.<\/p>\n<h4>Postfazione<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/users\/vmspike\/\" class=\"user_link\">vmspike<\/a><\/noindex> ha proposto un'opzione equivalente al risultato per il 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>\nATTENZIONE: il maiuscolo delle lettere <code>T<\/code> ha importanza. Se lo mescoli, otterrai un completo disastro: la direzione della copia cambier\u00e0.<br \/>\nRingraziamenti:<\/p>\n<ul>\n<li>Azienda <noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/\">RUVDS.COM<\/a><\/noindex> per il supporto e la possibilit\u00e0 di pubblicare nel proprio blog su Habr.<\/li>\n<li>Per l'immagine <noindex><a rel=\"nofollow\" href=\"https:\/\/vk.com\/neoprosveschenie\">TripletConcept<\/a><\/noindex>. L'immagine \u00e8 molto grande e dettagliata, pu\u00f2 essere aperta in una finestra separata.<\/li>\n<\/ul>\n<p>\n<b>P.S.<\/b> Invia eventuali errori riscontrati tramite messaggio privato. Accrescer\u00f2 la karma per questo.<\/p>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/ruvds.com\/ru-rub\/#order\"><img decoding=\"async\" alt=\"Comando cp: corretta copia di cartelle con file in *nix\" src=\"\/wp-content\/uploads\/2019\/10\/67131836f7fb6cf7827541e9dc607513.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<br \/>Fonte: <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.1.1 - 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\/it\/blog\/administrirovanie\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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 corretta delle cartelle con i file in *nix | ProHoster","description":"Questo articolo verr\u00e0 svelato.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/komanda-cp-pravilnoe-kopirovanie-papok-s-fajlami-v-nix","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/38928","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=38928"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/38928\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/29205"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=38928"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=38928"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=38928"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}