Я желаю загрузить tar.gz
архив, извлеките его и сожмите его в a zip
файл в одной команде. Причина этого состоит в том, чтобы быть независимой из временных файлов.
Команда я использую:
curl -L "someURL" | tar xOzf - | zip -qr > /home/username/filename.zip
дает мне zip-файл, который содержит названный файл -
.
Удаление -
от tar команда оставляет меня с zip-файлом, только содержащим небольшую часть загруженного файла, будучи очень крупным архивом.
Возможно, я пропускаю что-то здесь...
Вместо того, чтобы извлечь загруженные файлы к использованию стандартного вывода -O
опция с tar
можно извлечь загруженный архив с -v
опция.
Это распечатает извлеченные имена файлов с их полным путем в стандартном выводе, канал это для архивирования. Ваше задание будет сделано.
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-файла можно было убрать остаток.