Aws-cli: aws s3 sync synchronisiert die s3-Ordnerstruktur nicht lokal

Erstellt am 12. Sept. 2014  ·  100Kommentare  ·  Quelle: aws/aws-cli

Die aws s3-Synchronisierung synchronisiert die S3-Ordnerstruktur nicht vollständig lokal, auch wenn ich sie mit --delete- oder --recursive-Argumenten verwende:

aws --version
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.testordner
$ mkdir s3.testordner / test1
$aws s3 sync ./s3.testfolder s3: //s3.testbucket/
$aws s3 ls s3: //s3.testbucket/
$ touch s3.testfolder / test1 / 1
$ aws s3 sync ./s3.testfolder/ s3: //s3.testbucket/
hochladen: s3.testfolder / test1 / 1 zu s3: //s3.testbucket/test1/1
$aws s3 sync ./s3.testfolder s3: //s3.testbucket/
$ mkdir ./s3.testfolder/test-to-delete
$ aws s3 sync s3: //s3.testbucket/ ./s3.testfolder/ --delete --recursive
$ aws s3 sync s3: //s3.testbucket/ ./s3.testfolder/ --delete
$ ls -lah ./s3.testordner/
insgesamt 60K
drwxrwxr-x 4 tobi tobi 4.0K szept 12 15:24.
drwx ------ 71 tobi tobi 44K szept 12 15:22 ..
drwxrwxr-x 2 tobi tobi 4.0K szept 12 15:23 test1
drwxrwxr-x 2 tobi tobi 4.0K szept 12 15:24 test-to-delete

$aws s3 ls s3: //s3.testbucket/
PRE-Test1 /

feature-request s3 s3sync

Hilfreichster Kommentar

Basierend auf dem Feedback der Community haben wir uns entschieden, Funktionsanfragen an GitHub-Probleme zurückzugeben.

Alle 100 Kommentare

Dieses Verhalten ist bekannt. Der Grund für dieses Verhalten des Befehls sync ist, dass s3 keine Verzeichnisse physisch verwendet. Es gibt nur Eimer und Gegenstände. Objekte haben Präfixe, die sich wie Verzeichnisse verhalten, aber s3 bezeichnet ein bestimmtes physisches Objekt nicht als Verzeichnis.

Daher werden bei der Synchronisierung nur Dateien an s3 übertragen, da s3 keine physischen Verzeichnisse hat. Wenn Sie also versuchen, leere Verzeichnisse zu synchronisieren, wird nichts hochgeladen, da sich keine Dateien darin befinden. Sobald Sie Elemente im Verzeichnis abgelegt haben, wird die Datei (mit dem Präfix für das Verzeichnis) hochgeladen.

Danke Kyle, es ist klar. Ich weiß, wie S3 Dateien speichert, aber manchmal brauchen wir die gleiche Verzeichnisstruktur an mehreren Stellen, auch wenn es leere gibt, oder entfernen Sie sie, wenn wir sie nicht mehr benötigen.
Ein gutes Beispiel, wenn Sie eine komplexe Verzeichnisstruktur mit vielen Inhalten lokal haben, als Sie mit S3 synchronisiert haben. Danach synchronisiert ein automatisierter Mechanismus diese Struktur periodisch mit mehreren laufenden Instanzen. Sie halten den größten Teil des Inhalts von S3 auf dem neuesten Stand (löschen), dann synchronisiert der Automatismus erneut mit den Orten, an denen Sie ihn zuvor verwendet haben. Leider werden Sie feststellen, dass die ursprüngliche komplexe Verzeichnisstruktur auf Sync-Zielen für immer erhalten bleibt, was zu Verwirrung führen kann, wenn Sie sie überprüfen möchten oder Ihr Programm versucht, diese leeren Ordner zu verwenden, da Sie immer überall die gleichen benötigen. Darüber hinaus haben die Leute, die es mit --delete-Optionen verwenden, möglicherweise zuvor das "rsync"-Äquivalent unter Linux verwendet, das die Ordner synchronisiert hält, also auf die gleiche Operation zählt.
Ich denke, es wäre nicht schwer, einen Schalter oder eine Option für das AWS-Tool zu implementieren, um irgendwie zu erkennen, ob ein S3-Objekt eine Datei oder ein Ordner ist (Liste, Größe usw.) und diese lokal oder in einem S3-Bucket (z list(bucket.list("", "/"))?

Das macht Sinn. Werde versuchen, eine Funktion dafür hinzuzufügen.

Dies wäre auch für unsere Situation sehr nützlich. Wenn es als Option hinzugefügt würde (--sync-empty-directories), könnten die Leute es bei Bedarf verwenden.

+1 Brauche diese Funktion sehr dringend

+1. Möchte es verwenden.

+1

Ich war auch von diesem Verhalten überrascht, da es "sync" heißt.
Ich kann dies in meinem speziellen Anwendungsfall umgehen, aber zukünftigen Benutzern könnten die Schmerzen erspart bleiben :)

+1 zum Synchronisieren der Verzeichnisstruktur! Wenn Sie einen Ordner löschen, wird nur der Inhalt entfernt, aber der Ordner bleibt zurück...

+1. Ich habe die gleichen Bedürfnisse.

+1 - überrascht, dass das noch nicht implementiert wurde. Sicher, in meinem Fall spielt es keine große Rolle, und ich kann es umgehen (oder beim Erstellen von Strukturen einfach Platzhalterdateien verwenden), aber es wäre von Vorteil, wenn es entweder von s3 sync oder s3 cp unterstützt würde.

+1

s3cmd sync behält die Ordnerstruktur bei, daher gibt es einige Probleme beim Gewähren des Zugriffs während der Synchronisierung, so dass man danach ein weiteres s3cmd setacl --recursive ausführen muss…

+1

+1

+1

Danke für das Feedback an alle. Ich denke, die beste Option, die ich gesehen habe, ist das Hinzufügen einer Option --sync-empty-directories . Lass uns das tun.

@jamesls Ich erwarte etwas wie rsync-Funktionalitäten, aber s3 als Objektspeicher ist definitiv nicht dasselbe.

+1

+1

Gibt es einen Zeitplan für diese Funktion?

Als vorübergehende Problemumgehung habe ich eine leere .s3keep-Datei zu den leeren Verzeichnissen hinzugefügt und es funktioniert für mich. Dies ist ein Hack, den ich normalerweise verwende, um git auszutricksen, um leere Verzeichnisse nicht als leere zu behandeln :)

Wird dies auch das "Entfernen/Löschen" leerer Verzeichnisse auf S3 ermöglichen?

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

+1

_Ist sehr sinnvoll bei Datenmigrationen auf s3._

+1

+1 Ich wurde gerade von diesem überwältigt... Arg....

+1

+10
Es ist möglich, dies mit Dummy-Dateien zu umgehen, aber es wäre sauberer, wenn es eine Option gäbe, die die Synchronisierung eines leeren Präfixes erzwingt.

+1. Anwendungsfall: Sichern eines SVN-Repositorys.

Allgemeiner:
AWS s3 Synchronisierungssache
AWS s3 SynchronisierungDing_Kopie

Ich erwartete, dass thing_copy mit dem Ding genau übereinstimmt.

+1

+1

+1

+1 muss leere Verzeichnisse löschen

Wie ist der Fortschritt beim Hinzufügen dieser Option --sync-empty-directories ?
Feedback vom AWS-Team?
Vielen Dank.

+1 wäre ein sehr nützliches Feature für ein sehr nützliches Tool

+1

+1 (Ich wünschte auch, dass diese Funktion implementiert wurde und wünschte, Github.com hätte eine StackOverflow.com-ähnliche Schnittstelle zum "Abstimmen" von Problemen / Funktionen).

+1

+1

+1

+1

+1

2+ Jahre später und es ist immer noch nicht passiert.. ? wird es jemals? =/

+1

+1

+1

+1

+1000

+1

Ich habe mal recherchiert, wie das umgesetzt werden könnte. Alle s3-Befehle verwenden schließlich TransferManager aus der s3transfer- Bibliothek. ( hier verwiesen )

Um das Hinzufügen eines Ordners mit PutObject zu unterstützen, können wir einen leeren String im Body-Parameter senden. Ob das offiziell unterstützt wird, weiß ich allerdings nicht. Das habe ich hier umgesetzt:
https://github.com/svleeuwen/s3transfer/commit/b7d3745a995a75c5262950bb798c8c57e481c2b3

Ich hätte gerne ein Feedback dazu von einem Betreuer, bevor ich fortfahre.

+1

Meine Lösung bestand darin, meinen Bucket mit s3fs und rsync vom s3-Mount in ein Verzeichnis in meinem Home-Verzeichnis zu mounten.

+1

+1 brauche das wirklich...

+1

Seit 2014 geöffnet? Wirklich? :unbelustigt:

+1

+1

+1

+1

+1

+1

+1

+1

+1

@thenetimp Diese Lösung ist für kleine Eimer

+1

Guten Morgen!

Wir schließen dieses Problem hier auf GitHub im Rahmen unserer Migration zu UserVoice für Funktionsanfragen, die die AWS CLI betreffen.

Auf diese Weise können wir Ihnen die wichtigsten Funktionen zur Verfügung stellen, indem wir Ihnen die Suche nach und die Anzeige von Support für die Funktionen erleichtern, die Ihnen am wichtigsten sind, ohne die Konversation mit Fehlerberichten zu verwässern.

Als kurze Einführung in UserVoice (falls noch nicht bekannt): Nachdem eine Idee veröffentlicht wurde, können die Leute über die Ideen abstimmen und das Produktteam reagiert direkt auf die beliebtesten Vorschläge.

Wir haben vorhandene Funktionsanfragen von GitHub importiert – suchen Sie dort nach diesem Problem!

Und keine Sorge, dieses Problem wird der Nachwelt zuliebe weiterhin auf GitHub existieren. Da es sich um einen Nur-Text-Import des ursprünglichen Beitrags in UserVoice handelt, werden wir die Kommentare und Diskussionen, die bereits hier zur GitHub-Ausgabe existieren, im Hinterkopf behalten.

GitHub bleibt der Kanal zum Melden von Fehlern.

Auch diese Ausgabe kann nun wieder gefunden werden, indem Sie nach dem Titel suchen unter: https://aws.uservoice.com/forums/598381-aws-command-line-interface

-Das AWS SDKs & Tools-Team

Dieser Eintrag ist speziell auf UserVoice zu finden unter: https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168436-aws-s3-sync-does-not-synchronize-s3- Ordnerstruktur

tolle Arbeit Andre, schließe ein Problem und gib uns einen Link, der nichts mit dem Problem zu tun hat. Von all den nutzlosen Beiträgen

Die generische Boilerplate ist enttäuschend. Ich denke, die Grenze zwischen einer Funktionsanfrage und einem Fehlerbericht kann ziemlich verschwommen sein. Um den Benutzern das Durchsuchen des UserVoice-Beitrags nach dieser Funktionsanforderung zu ersparen, finden Sie ihn unter https://aws.uservoice.com/forums/598381-aws-command-line-interface/suggestions/33168436-aws-s3-sync-does-not -synchronize-s3-folder-structu

Basierend auf dem Feedback der Community haben wir uns entschieden, Funktionsanfragen an GitHub-Probleme zurückzugeben.

+1

+1

+1

+1

+1

+1

+1. Wäre ein nettes Feature hinzuzufügen.

+1

+1

Gleicher Fehler
awscli==1.16.74

+1

-1

Der aws s3 sync-Befehl ist bereits rekursiv, sodass keine rekursive Option erforderlich ist. Außerdem kopiert der sync-Befehl nur Dinge, die noch nicht auf dem Ziel vorhanden sind. Wenn Sie auf einen Ordner zeigen, wird alles darin rekursiv synchronisiert, was noch nicht auf Ihrem Zielziel vorhanden ist. Dies ist anders als der Befehl aws s3 cp. Der Befehl cp kopiert alles, was Sie ihm sagen, unabhängig davon, ob es bereits auf dem Ziel vorhanden ist. Der Befehl cp/mv/rb verwendet die Option --recursive zum rekursiven Kopieren/Verschieben/Löschen von Ordnern/Dateien. Vielen Dank

@3ggaurav das Problem stammt ursprünglich aus dem Jahr 2014, als ich mich daran erinnere, dass sync eine Option --recursive hatte.

Wenn Sie eine Stack-Overflow-Antwort wörtlich zitieren möchten, ist es im Allgemeinen eine gute Praxis, darauf zu verweisen.

Die Antwort auf den Stapelüberlauf ist hier.

Immer noch keine Fortschritte dabei?

+1

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen