gsutil cp: копировать файлы с параметром -I в соответствующие подкаталоги

Я хотел бы скопировать список файлов в корзину, сохранив при этом структуру каталогов.

тест.txt:

a/b/1.jpg
a/c/23.jpg
a/d/145.jpg

команда gsutil:

cat file.txt | gsutil -m cp -I 'gs://my-bucket/'

Это копирует файлы, но игнорирует подкаталоги. Есть ли способ решить мою проблему? Большое спасибо!


person Markus Steinhauer    schedule 02.12.2015    source источник


Ответы (3)


У меня была такая же проблема, и после некоторых размышлений я понял, что это сделано так же, как команда unix cp. Я придумал решение с помощью утилиты xargs, и вы можете сделать:

cat test.txt | xargs -I '{}' gsutil '{}' gs://my-bucket-name/'{}'

С опцией -I xargs выполняет следующую команду для каждой входной строки. Одним из недостатков этого метода является то, что вы не можете использовать -m вместо gsutil cp, что может значительно замедлить выполнение задачи.

person baxang    schedule 18.06.2017

Я считаю, что вы должны использовать опцию -R, чтобы получить рекурсивную копию: gsutil -m cp -R gs://my-bucket/

Из документации: https://cloud.google.com/storage/docs/gsutil/commands/cp

Если вы хотите скопировать все дерево каталогов, вам нужно использовать параметр -r: gsutil cp -r dir gs://my-bucket

Надеюсь, это поможет!

person HoneyBuddha    schedule 01.10.2016
comment
увы, -r копирует дерево указанного каталога в цель, а не какие-либо промежуточные каталоги для указанного файла. По сути, gsutil cp понятия не имеет о корневом/рабочем каталоге источника. - person Clockwork-Muse; 12.05.2021

Я думаю, вы можете использовать вместо этого команду find. Например, следующая команда помогла мне скопировать весь файл .json из папки «[ваш путь]» и ее подпапок в корзину GCS с работающей опцией -m. Надеюсь, поможет

sudo find [your path] -print | grep -i '.*[.]json' | sudo gsutil -m cp -I gs://[your bucket]
person foxwendy    schedule 13.07.2017