Запаковка множества файлов по одному (Создание множества zip-архивов из множества файлов)
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 78
- ОС: Ubuntu 20.04 MATE
Запаковка множества файлов по одному
Имеется более сотни файлов в папке. Надо запаковать их в zip так чтобы создалось множество архивов zip, по одному файлу в архиве. Т. е. 001.htm 002.htm > 001.zip 002.zip и так далее. Не нашёл как сделать именно это, ни в Гугле ни в мане.
Заранее спасибо.
Заранее спасибо.
-
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: Запаковка множества файлов по одному
Код: Выделить всё
gzip *
либо
Код: Выделить всё
bzip2 *
либо
Код: Выделить всё
lzma *
либо
Код: Выделить всё
lzop -U *
zip? А зачем?
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Запаковка множества файлов по одному
Код: Выделить всё
for f in *; do g=${f%.*}; zip "$g" "$f"; done
Мои розовые очки
Спасибо сказали:
-
- Сообщения: 78
- ОС: Ubuntu 20.04 MATE
Re: Запаковка множества файлов по одному
Я их собираюсь выложить на сайте, откуда их стопудово будут качать на компы с Windows.
watashiwa_daredeska писал(а): ↑13.10.2009 19:40Файлы 001.html и 001.txt попадут-таки в один архив 001.zip.Код: Выделить всё
for f in *; do g=${f%.*}; zip "$g" "$f"; done
Это не критично. У меня только *.htm
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Запаковка множества файлов по одному
watashiwa_darede...
rm_
ваш код будет работать только если файлов мало. если максимальная длинна строки 32768, а имя файла с путём ~100 байт, то * развернётся максимум на 327 файлов. Что особенно неприятно, никаких сообщений не будет, часть файлов просто не обработается (так было у меня). Причём xargs не помогает. Лекарство:
1) список файлов записать во временный файл.
2) затем читать этот файл while read;do ... done < tmp.lst
rm_
ваш код будет работать только если файлов мало. если максимальная длинна строки 32768, а имя файла с путём ~100 байт, то * развернётся максимум на 327 файлов. Что особенно неприятно, никаких сообщений не будет, часть файлов просто не обработается (так было у меня). Причём xargs не помогает. Лекарство:
1) список файлов записать во временный файл.
2) затем читать этот файл while read;do ... done < tmp.lst
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Запаковка множества файлов по одному
Воспользуйтесь find - проблемы с пробелами и большим кол-вом файлов не будет.
P.S. А вантузятники, между прочим, gzip-архивы спокойно открывают. Так что:
Код: Выделить всё
find ./ -type f -print0 | xargs -0 gzip
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 3340
- Статус: It's the GNU Age
- ОС: Debian
Re: Запаковка множества файлов по одному
Во-первых, звёздочка в командной строке экспандится в имя файла без пути.
Во-вторых, ограничение на длину ком.строки не 32768 (это не винда и не прочие отсталые системы), а гораздо больше.
10 тысяч файлов с длинными именами, строка почти в 400 килобайт - всё работает нормально:
Код: Выделить всё
rm@rm:~/tmp/test$ echo "<? for(\$i=0;\$i<10000;\$i++) touch(\"long_filename_number_\$i.uncompressed\"); ?>" | php
rm@rm:~/tmp/test$ echo * | wc -c
388890
rm@rm:~/tmp/test$ gzip *
rm@rm:~/tmp/test$ ls *.uncompressed
ls: cannot access *.uncompressed: No such file or directory
rm@rm:~/tmp/test$ echo *.gz | wc -c
418890
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Запаковка множества файлов по одному
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Запаковка множества файлов по одному
в слаке 12.2
configure:5946: checking the maximum length of command line arguments
configure:6066: result: 98304
в слаке 10.2 - 32768
У вас - да. но выше было find -print0.
наличие 1го положительного результата после наступания на грабли не доказывает отсутствие грабель.
пишу-же - грабли вполне себе существуют, и я на них уже наступал. причём в скрипте для бекапа (к счастью вовремя заметил).
ЗЫЖ
Код: Выделить всё
rm@rm:~/tmp/test$ gzip *
кстати, так обычно работает, видимо в развороте звёздочки есть какая-то оптимизация. однако она не срабатывает например на find | xargs.
-
- Сообщения: 3321
- Статус: Красный глаз тролля
- ОС: ArchLinux
Re: Запаковка множества файлов по одному
Где не пойдет? Проверял эту строчку на куче файлов, причем в именах некоторых были пробелы - все нормально работает.
RTFM
-------
KOI8-R - патриотичная кодировка
-------
KOI8-R - патриотичная кодировка

-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Запаковка множества файлов по одному
пробелы - нормально, любые символы кроме `/' и `\000' пойдут. Но много файлов не получится. И не надо пробовать, я вам верю, что на незагруженном десктопе с 2Гб памяти консольные проги работают, и жрут память сотнями метров.
-
- Бывший модератор
- Сообщения: 4038
- Статус: Искусственный интеллект (pre-alpha)
- ОС: Debian GNU/Linux
Re: Запаковка множества файлов по одному
Нет. Ибо на for описанные ограничения не распространяются. Это ведь не внешняя команда.
Мои розовые очки