перемещать файлы из исходной папки в папку назначения, не удаляя исходную папку - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь переместить подпапки из одного каталога сегмента S3 в другой каталог в том же сегменте. После перемещения файлов в подпапке главный каталог удаляется, что для меня не должно происходить.

aws s3 mv s3://Bucket-Name/Input-List/$i/  s3://Bucket-Name/Input-List-Archive/$i/   --recursive

COLLECTION_LIST=(A B C D E F)
for i in ${COLLECTION_LIST[@]}
do

if [ $i == "A" -o $i == "B" ]
        then
                aws s3 mv s3://Bucket-Name/Input-List/$i/  s3://Bucket-Name/Input-List-Archive/$i/   --recursive
    else
                aws s3 mv s3://Bucket-Name/Input-List/Others/$i/  s3://Bucket-Name/Input-List-Archive/Others/$i/  --recursive

Здесь все файлы в Input-List должны быть перемещены в Input-List-Archive без директории Input-ListИсключен.

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Во-первых, обратите внимание, что каталоги / папки на самом деле не существуют в Amazon S3.

Например, я мог бы выполнить эту команду:

aws s3 cp foo.txt s3://my-bucket/folder1/folder2/foo.txt

Это будет работать успешно, даже еслиfolder1 и folder2 не существуют.

Консоль управления Amazon S3 сделает эти папки «видимыми», но на самом деле они не существуют.

Если я затем запустил:

aws s3 rm s3://my-bucket/folder1/folder2/foo.txt

тогда объект будет удален, а папки «исчезнут» (потому что их никогда не существовало).

Иногда, однако, люди хотят, чтобы папка появлялась. Когда в консоли управления создается папка, создается объект нулевой длины с ключом (именем файла), установленным на имя папки. Это приведет к появлению пустой «папки», но на самом деле это не папка.

При перечислении объектов в S3 вызовы API могут возвращать общий префикс , который в принципе похож напапка, но на самом деле это просто «часть пути» имени файла.

Стоит также упомянуть, что в Amazon S3 нет команды «переместить». Вместо этого при использовании команды aws s3 mv интерфейс командной строки AWS копирует объект в новый объект, а затем удаляет исходный объект. Это заставляет объект выглядеть так, как будто он был перемещен, но на самом деле он был скопирован и удален.

Итак, вы можете выбрать следующие параметры:

  • Не беспокойтесь о папках. Просто притворись, что они существуют. Они не служат какой-либо цели. ИЛИ
  • Создать новую папку после перемещения. ИЛИ
  • Напишите свою собственную программу для копирования и удаления объектов без удаления папки.

На самом деле, вполне возможно, что папка никогда не существовала впервое место (то есть не было файла нулевой длины с ключом, совпадающим с именем папки), поэтому он никогда не удалялся. Просто у S3 не было ничего, чтобы папка «появлялась» там.

0 голосов
/ 17 октября 2019

Как насчет написания сценария для рекурсивного копирования файлов из подпапок и удаления этих файлов из подпапки вместо использования команды mv?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...