85 votes

Copier la structure de répertoire intacte dans le bucket AWS S3

Je veux utiliser le AWS S3 cli pour copier une structure de répertoire complète dans un bucket S3.

Jusqu'à présent, tout ce que j'ai essayé copie les fichiers dans le seau, mais la structure du répertoire est effondrée. (pour le dire autrement, chaque fichier est copié dans le répertoire racine du seau)

La commande que j'utilise est :

aws s3 cp --recursive ./logdata/ s3://bucketname/

J'ai aussi essayé de laisser de côté le slash de fin sur ma désignation source (c'est-à-dire, l'argument de copie depuis). J'ai aussi utilisé un joker pour désigner tous les fichiers ... chaque chose que j'essaie copie simplement les fichiers journaux dans le répertoire racine du seau.

7 votes

Oui ! C'est certainement la réponse. Contrairement à Unix, la commande cp (et la commande sync) ne créent pas de répertoire cible du côté destination à moins que vous ne leur demandiez de le faire. Donc si vous aws s3 cp --recursive mylocalsrcdir s3://bucket/ alors il va simplement mettre les fichiers de votre dépôt local dans le "répertoire racine" du bucket. Si vous faites aws s3 cp --recursive mydirectory s3://bucket/mydirectory alors il recréera la structure des répertoires à l'extrémité cible.

3voto

twhitney Points 33

Je n'ai pas réussi à faire fonctionner s3 sync ou s3 cp sur un dossier de 55 Go avec des milliers de fichiers et plus d'une vingtaine de sous-répertoires à l'intérieur. Essayer de synchroniser l'ensemble du dossier provoquerait simplement un échec silencieux d'awscli sans rien téléverser dans le compartiment.

J'ai fini par faire ceci pour d'abord synchroniser tous les sous-répertoires et leurs contenus (la structure du dossier est préservée) :

nice find . -mindepth 1 -maxdepth 1 -type d | cut -c 3- | while read line; do aws s3 sync $"$line" "s3://bucketname/$line"; done

Ensuite, j'ai fait ceci pour obtenir les 30 000 fichiers au niveau supérieur :

nice find . -mindepth 1 -maxdepth 1 -type f | cut -c 3- | while read line; do aws s3 cp "$line" "s3://bucketname/";

Assurez-vous de surveiller la charge sur le serveur (astuce : vous pouvez utiliser w pour afficher simplement la charge) et ctrl-z pour suspendre la commande si la charge devient trop élevée. (fg pour la reprendre).

Je mets cela ici au cas où cela aiderait quelqu'un dans une situation similaire.

Remarques :

-mindepth 1 exclut .

-maxdepth 1 empêche find de lister le contenu des sous-répertoires, puisque s3 sync les gère avec succès.

cut -c 3- supprime le "./" du début de chaque résultat de find.

2voto

brahul Points 11

Cela fonctionne pour moi.. aws s3 sync mydir s3://rahuls-bucket/mydir

1voto

koolhead17 Points 371

Vous pourriez également essayer le client minio, alias mc

$ mc cp Desktop/test/test/test.txt s3/miniocloud/Desktop/test/test/

J'espère que cela vous aidera.

PS : Je suis l'un des contributeurs du projet.

1 votes

Crédit là où crédit est dû: mc a fait le travail et a préservé la structure des répertoires - impressionnant! J'étais déjà énervé d'installer plus de 200 mégaoctets de trucs Python & Pip pour utiliser awscli et de lire ici qu'il fait effondrer la structure des répertoires..

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X