curl to tar to zip не работает должным образом

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

Команда, которую я использую:

curl -L "someURL" | tar xOzf - | zip -qr > /home/username/filename.zip

дает мне почтовый файл, который содержит файл с именем -,

Удаление - из команды tar оставляет мне zip-файл, содержащий только небольшую часть загруженного файла, при этом очень большой архив.

Может быть, я что-то здесь упускаю...

1 ответ

Вместо извлечения загруженных файлов в стандартный вывод, используя -O вариант с tar Вы можете извлечь загруженный архив с -v вариант.

Он напечатает извлеченные имена файлов с их полным путем в стандартном выводе и передаст их в zip. Ваша работа будет выполнена.

curl -L "http://someurl/some.tar.gz" | tar xvzf - | zip -qr /path/to/myfile.zip -@

Здесь список файлов указан как -@, zip берет список входных файлов из стандартного ввода, а не из командной строки. Чтобы узнать больше о zip см. man zip

Содержание myfile.zip будет как ниже:

myfile.zip
└──some
    ├── file1
    ├── file2
    ├── file3
    └── folder
        ├── file4
        ├── file5
        ├── file6
        └── file7

Все файлы и папки находятся в родительской папке some который находится в корне почтового индекса.

Как положить все файлы и папки в корень zip

Как OP попросил, чтобы все файлы были в корне zip, в отличие от приведенного выше случая, когда все эти файлы и папки были в папке, которая была в корне zip.

Используйте следующее,

curl -L "http://someurl/some.tar.gz" | tar xvzf - --strip-components=1 && zip -qr /path/to/myfile.zip *

Это создаст содержимое myfile.zpi следующим образом:

myfile.zip
    ├── file1
    ├── file2
    ├── file3
    └── folder
        ├── file4
        ├── file5
        ├── file6
        └── file7

Опция --strip-components=1 с tar не извлекайте первый компонент архива, т.е. родительскую папку. Таким образом, все файлы и папки извлекаются в текущей папке.

Возможно, вы захотите сделать это внутри пустой временной папки. Так что после создания zip-файла вы можете очистить остаток.

Другие вопросы по тегам