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-файла вы можете очистить остаток.