Aws-cli: لا تقوم مزامنة aws s3 بمزامنة بنية مجلد s3 محليًا

تم إنشاؤها على ١٢ سبتمبر ٢٠١٤  ·  100تعليقات  ·  مصدر: aws/aws-cli

لا تقوم مزامنة aws s3 بمزامنة بنية مجلد S3 بشكل كامل محليًا حتى إذا كنت أستخدمها مع - حذف أو - وسيطات متتالية:

AWS - الإصدار
aws-cli / 1.4.3 Python / 2.7.6 Linux / 3.13.0-35-generic

$ aws s3 ls s3: //s3.testbucket
$ aws s3 ls s3: //s3.testbucket/
$ mkdir s3.testfolder
$ mkdir s3.testfolder / test1
مزامنة $ aws s3 ./s3.testfolder s3: //s3.testbucket/
$ aws s3 ls s3: //s3.testbucket/
المس s3.testfolder / test1 / 1
مزامنة $ aws s3 ./s3.testfolder/ s3: //s3.testbucket/
تحميل: s3.testfolder / test1 / 1 إلى s3: //s3.testbucket/test1/1
مزامنة $ aws s3 ./s3.testfolder s3: //s3.testbucket/
$ mkdir ./s3.testfolder/test-to-delete
$ aws s3 sync s3: //s3.testbucket/ ./s3.testfolder/ - حذف - متسلسل
$ aws s3 sync s3: //s3.testbucket/ ./s3.testfolder/ - حذف
$ ls -lah ./s3.testfolder/
إجمالي 60 ألف
drwxrwxr-x 4 توبي توبي 4.0K szept 12 15:24.
drwx ------ 71 توبي توبي 44 ألف سبتمبر 12 15:22 ..
drwxrwxr-x 2 توبي توبي 4.0K szept 12 15:23 test1
drwxrwxr-x 2 tobi 4.0K szept 12 15:24 اختبار للحذف

$ aws s3 ls s3: //s3.testbucket/
الاختبار الأولي 1 /

feature-request s3 s3sync

التعليق الأكثر فائدة

بناءً على تعليقات المجتمع ، قررنا إعادة طلبات الميزات إلى مشكلات GitHub.

ال 100 كومينتر

هذا السلوك معروف. السبب في أن الأمر sync يتصرف بهذه الطريقة هو أن s3 لا يستخدم الدلائل فعليًا. لا يوجد سوى دلاء وأشياء. تحتوي الكائنات على بادئات تعمل مثل الدلائل ، لكن s3 لا يعين كائنًا ماديًا معينًا ليكون دليلًا.

لذلك ، عند حدوث المزامنة ، يتم نقل الملفات فقط إلى s3 لأن s3 لا يحتوي على أدلة فعلية. لذلك عندما تحاول مزامنة الأدلة الفارغة ، لا يتم تحميل أي شيء نظرًا لعدم وجود ملفات بها. بمجرد وضع العناصر في الدليل ، سيتم تحميل الملف (مع البادئة التي تمثل الدليل).

شكرا لك كايل ، هذا واضح. أعرف كيف تخزن S3 الملفات ، لكن في بعض الأحيان نحتاج إلى بنية الدليل نفسها في أماكن Sevaral حتى لو كانت هناك أماكن فارغة أو إزالتها من إذا لم نعد بحاجة إليها.
مثال جيد إذا كان لديك بنية دليل معقدة بها الكثير من المحتويات محليًا أكثر مما قمت بمزامنته مع S3. بعد ذلك ، تقوم آلية مؤتمتة بمزامنة هذا الهيكل بشكل دوري مع العديد من مثيلات التشغيل. أنت تحافظ على تحديث (حذف) معظم المحتوى من S3 ثم إعادة المزامنة التلقائية إلى الأماكن التي استخدمتها من قبل. لسوء الحظ ، ستجد بنية الدليل المعقد الأصلي تظل إلى الأبد على أهداف المزامنة مما قد يتسبب في حدوث ارتباك إذا كنت تريد التحقق منها أو حاول برنامجك استخدام هذه المجلدات الفارغة لأنك تحتاج دائمًا إلى نفس المجلدات في كل مكان. علاوة على ذلك ، قد يستخدم الأشخاص الذين يستخدمونه مع خيارات الحذف "rsync" المكافئ من قبل على نظام Linux الذي يحافظ على مزامنة المجلدات ، لذا يتم احتسابها على نفس العملية.
أعتقد أنه لن يكون من الصعب تنفيذ مفتاح أو خيار لأداة aws للكشف بطريقة أو بأخرى عما إذا كان كائن S3 عبارة عن ملف أو مجلد (قائمة ، حجم ، إلخ ..) وإنشاءها / حذفها محليًا أو في دلو S3 (على سبيل المثال list (bucket.list (""، "/"))؟

منطقي. سوف ننظر في إضافة ميزة لذلك.

سيكون هذا مفيدًا جدًا لموقفنا أيضًا. إذا تمت إضافته كخيار (- المزامنة-الدلائل الفارغة) يمكن للأشخاص اختيار استخدامه عند الحاجة.

+1 بحاجة ماسة لهذه الميزة

+1. هل ترغب في استخدامه.

+1

كما أنني فوجئت بهذا السلوك ، حيث يطلق عليه اسم "التزامن".
يمكنني التغلب على هذا في حالة الاستخدام الخاصة بي ، ولكن يمكن تجنيب المستخدمين في المستقبل الألم :)

+1 على القدرة على مزامنة بنية الدليل! إذا قمت بحذف مجلد ، فإنه يزيل المحتوى فقط ، لكنه يترك المجلد خلفه ...

+1. لدي نفس الاحتياجات.

+1 - تفاجأت بأنه لم يتم تنفيذه بعد. بالتأكيد ، في حالتي ، لا يهم كثيرًا ، ويمكنني حلها (أو فقط استخدام ملفات العناصر النائبة عند إنشاء الهياكل) ، ولكن سيكون من المفيد أن يتم دعمها من خلال مزامنة s3 أو s3 cp.

+1

لا يحتفظ s3cmd sync بهيكل المجلد ولكن هناك بعض المشكلات عند منح الوصول أثناء المزامنة ، لذلك يحتاج المرء إلى تشغيل s3cmd setacl --recursive بعد ذلك ...

+1

+1

+1

شكرا للجميع على ردود الفعل. أعتقد أن أفضل خيار رأيته هو إضافة خيار --sync-empty-directories . لنفعل ذلك.

jamesls أتوقع إلى حد ما وظائف rsync ، لكن s3 كتخزين كائن ليس هو نفسه بالتأكيد على الرغم من ذلك.

+1

+1

أي جدول زمني لهذه الميزة؟

كحل مؤقت ، أضفت ملفًا فارغًا .s3keep إلى الدلائل الفارغة وهو يعمل معي. هذا هو الاختراق الذي أستخدمه عادةً لخداع git لعدم التعامل مع الدلائل الفارغة على أنها أدلة فارغة :)

هل سيسمح هذا أيضًا "بإزالة / حذف" الدلائل الفارغة من S3؟

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

_ يكون له معنى كبير أثناء عمليات ترحيل البيانات إلى s3._

+1

+1 لقد حطم هذا للتو ... أرج ....

+1

+10
من الممكن حل هذه المشكلة باستخدام ملفات وهمية ، ولكن سيكون من الأنظف إذا كان هناك خيار لفرض بادئة فارغة للمزامنة.

+1. حالة الاستخدام: النسخ الاحتياطي لمستودع svn.

بشكل عام:
شيء مزامنة AWS s3
مزامنة AWS s3شيء_نسخ

توقعت أن يتطابق الأمر thing_copy مع الشيء تمامًا.

+1

+1

+1

+1 بحاجة إلى حذف الدلائل الفارغة

كيف هو تقدم إضافة هذا الخيار --sync-empty-directories ؟
أي ملاحظات من فريق AWS؟
شكرا.

سيكون +1 ميزة مفيدة جدًا لأداة مفيدة جدًا

+1

+1 (أتمنى أيضًا أن يتم تنفيذ هذه الميزة وأتمنى أن يكون لدى Github.com واجهة StackOverflow.com مثل "التصويت" على المشكلات / الميزات).

+1

+1

+1

+1

+1

بعد أكثر من عامين وما زال لم يحدث ..؟ هل من أي وقت مضى؟ = /

+1

+1

+1

+1

+1000

+1

لقد قمت ببعض البحث عن كيفية تنفيذ ذلك. ينتهي الأمر بجميع أوامر s3 باستخدام TransferManager من مكتبة s3transfer . ( المشار إليها هنا )

لدعم إضافة مجلد باستخدام PutObject ، يمكننا إرسال سلسلة فارغة في معلمة النص. لا أعرف ما إذا كان هذا مدعومًا رسميًا أم لا. لقد نفذت هذا هنا:
https://github.com/svleeuwen/s3transfer/commit/b7d3745a995a75c5262950bb798c8c57e481c2b3

أود الحصول على بعض التعليقات على هذا من المشرف قبل المتابعة.

+1

كان الحل هو تركيب دلو مع s3fs و rsync من s3 mount إلى دليل في دليل منزلي.

+1

+1 حقًا بحاجة إلى هذا ...

+1

مفتوح منذ 2014؟ حقا؟ : unamused:

+1

+1

+1

+1

+1

+1

+1

+1

+1

thenetimp هذا الحل

+1

صباح الخير!

نحن نغلق هذه المشكلة هنا على GitHub ، كجزء من ترحيلنا إلى

سيتيح لنا ذلك الحصول على أهم الميزات لك ، من خلال تسهيل البحث عن الميزات التي تهتم بها وإظهار الدعم لها ، دون إضعاف المحادثة مع تقارير الأخطاء.

ككتاب تمهيدي سريع لبرنامج UserVoice (إن لم يكن مألوفًا بالفعل): بعد نشر الفكرة ، يمكن للأشخاص التصويت على الأفكار ، وسيستجيب فريق المنتج مباشرةً للاقتراحات الأكثر شيوعًا.

لقد قمنا باستيراد طلبات الميزات الحالية من GitHub - ابحث عن هذه المشكلة هناك!

ولا تقلق ، ستظل هذه المشكلة موجودة على GitHub من أجل الأجيال القادمة. نظرًا لأنه استيراد نصي فقط للمنشور الأصلي في UserVoice ، سنظل نضع في اعتبارنا التعليقات والمناقشات الموجودة بالفعل هنا حول مشكلة GitHub.

سيظل GitHub هو القناة للإبلاغ عن الأخطاء.

مرة أخرى ، يمكن الآن العثور على هذه المشكلة من خلال البحث عن العنوان على: https://aws.uservoice.com/forums/598381-aws-command-line-interface

-فريق أدوات وأدوات AWS SDK

يمكن العثور على هذا الإدخال على وجه التحديد في UserVoice على: https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168436-aws-s3-sync-does-not-synchronize-s3- مجلد منظم

أحسنت صنعًا يا أندريه ، أغلق المشكلة وأعطنا رابطًا لا علاقة له بالمشكلة. من كل المشاركات عديمة الفائدة

النموذج المعياري العام مخيب للآمال. أعتقد أن الخط الفاصل بين طلب الميزة وتقرير الخطأ يمكن أن يكون ضبابيًا جدًا. لحفظ بعض الأشخاص الذين يبحثون في منشور UserVoice عن طلب الميزة هذا ، يتوفر على https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168436-aws-s3-sync-does-not -تزامن- s3- المجلد- Structu

بناءً على تعليقات المجتمع ، قررنا إعادة طلبات الميزات إلى مشكلات GitHub.

+1

+1

+1

+1

+1

+1

+1. ستكون ميزة لطيفة لإضافتها.

+1

+1

المشكلة نفسها
awscli == 1.16.74

+1

-1

أمر المزامنة aws s3 متكرر بالفعل ، لذلك ليست هناك حاجة لخيار تكراري ، بالإضافة إلى أن أمر المزامنة ينسخ فقط الأشياء غير الموجودة بالفعل في الوجهة. إذا أشرت إلى مجلد ، فسيتم بشكل متكرر مزامنة كل شيء بداخله غير موجود بالفعل في وجهتك المستهدفة. هذا مختلف عن الأمر aws s3 cp. ينسخ الأمر cp كل ما تقوله له ، بغض النظر عن وجوده بالفعل على الهدف. يأخذ الأمر cp / mv / rb خيارًا متكررًا لنسخ / نقل / حذف المجلدات / الملفات بشكل متكرر. شكرا

@ 3ggaurav ، كانت المشكلة في الأصل من عام 2014 عندما أتذكر أن sync يحتوي على خيار --recursive .

بالإضافة إلى ذلك ، إذا كنت ستقتبس من إجابة تجاوز سعة المكدس حرفيًا ، فمن الممارسات الجيدة عمومًا الإشارة إليها / منحها الفضل.

الجواب تجاوز سعة المكدس هنا.

لا يزال هناك تقدم في هذا؟

+1

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات