Задача - упаковать очень большое количество файлов в 1.
Перехожу в каталог, в котором находится 150 тысяч файлов и делаю:
[console]tar -cf arhiv.tar *[/console]
Выдает:
[console]Слишком длинный список аргументов[/console]
Вариант делать так:
[console]tar -cf arhiv.tar catalog/[/console]
то есть если не указываем * а просто каталог, в котором файлы
работает, но мне не подходит, так как не нужна эта лишняя вложенность в каталог. Потом если распакую - придется переносить mv и возникнет та же проблема.
Подскажите как это решить.
Tar - Слишком длинный список аргументов
Нагуглил варианты решения похожих проблем для mv, cp, rm - но там несколько другое - там работа происходит поэлементно, поэтому можно использовать скажем find. Нагуглить проблему: Слишком длинный список аргументов для tar не удалось. Думаю, если проблема будет здесь решена - она будет в топе гугла по этому запросу :)
find . -print0 | xargs -0 tar cvf /tmp/archive.tarЗапускать в текущем каталоге, архив будет в /tmp
Lupo Alberto, спасибо. Отлично работает.
Я правда делаю даже так:
[console]nice -n 19 ionice -c 3 find . -print0 | xargs -0 tar cvf archive.tar[/console]
Это еще чтобы нагрузки не было.
Вопрос снят.
valet, вы к архиву путь отличный от текущего укажите, а то при следующем архивировании будет «тарить затаренное» wink
valet, попробуйте так:
tar -C 'каталог источника' -cvf archive.tar.gz .
valet, вы к архиву путь отличный от текущего укажите, а то при следующем архивировании будет «тарить затаренное»
Да, кажется это и произошло :(
Создало 30 Гб архив - я постоянно мониторил его размер - архив рос вплоть до 30 Гб. А потом была остановка - очевидно список файлов закончился и удалялся 30 Гб-ый архив. - и начало все заново - архив начал набирать размер с 0-я. Как бы я так понимаю по кругу пошло.
Сейчас попробую.
Обидно - долго создавало 30 Гб архив, поставил заново...
Перехожу в каталог, в котором находится 150 тысяч файлов и делаю:
это вы зря. Так не принято делать, надо было перейти чуть выше, и тарить каталог.
tar -C 'каталог источника' -cvf archive.tar.gz .
опция -C для других случаев придумана.
find . -print0 | xargs -0 tar cvf /tmp/archive.tar
Этот метод не работает, опять затарило все и пересоздало файл и заново начало тарить. На этот раз я указывал каталог, отличный от текущего. Чувствую этот метод не работает - тарятся файлы по кругу...
tar -C 'каталог источника' -cvf archive.tar.gz
Сейчас этот метод попробую.
Нет, выдает:
tar: Робкий отказ от создания пустого архива
Попробуйте `tar --help' или `tar --usage' для
получения дополнительной информации.
Этот метод не работает, опять затарило все и пересоздало файл и заново начало тарить. На этот раз я указывал каталог, отличный от текущего. Чувствую этот метод не работает - тарятся файлы по кругу...
В аргументах команды find указан текущий каталог, т.е. "." точка; архив создаётся в /tmp. Как он может опять "затариться"?
Сейчас этот метод попробую.
Нет, выдает:
tar: Робкий отказ от создания пустого архива
В конце команды пропущена точка (после имени архива пробел, за ним точка):
tar -C 'каталог источника' -cvf archive.tar.gz .
[console]$ cd /home/tmp
$ mkdir 00
$ cd 00
$ cp -R /home/john ./
$ ls -l
итого 4
drwxr-xr-x 29 john john 4096 янв. 31 00:24 john/
$ tar -cC ./ -cpvf /home/tmp/00/mybackup.tar ./john
$ ls -l
итого 639300
drwxr-xr-x 29 john john 4096 янв. 31 00:24 john/
-rw-r--r-- 1 john john 654632960 янв. 31 00:30 mybackup.tar
[/console]
В аргументах команды find указан текущий каталог, т.е. "." точка; архив создаётся в /tmp. Как он может опять "затариться"?
Не знаю - сначала у меня действительно стояла просто название архива, то есть в текущий каталог. При этом пошло по кругу, архив набрав 30 Гб - именно такой размер всех файлов там, начал заново набираться.
Прочитав ваше сообщение, я тупо все это дело еще раз запустил, указав уже полный путь - в другой каталог - но результат оказался тот же.
В конце команды пропущена точка (после имени архива пробел, за ним точка):
Да, спасибо, я как-то не заметил. С точкой вроде работает. О результатах отпишусь, пока пошло дело.
Да, метод
[console]tar -C 'каталог источника' -cvf archive.tar.gz .[/console]
рабочий. Вопрос снят.
Да, метод
tar -C 'каталог источника' -cvf archive.tar.gz .
...называется "удаление гланд ректально".
если вы в источнике, достаточно
[console]tar -czvf ../arc.tgz .[/console]
и ещё - вы НЕ сжимаете, но расширение у вас таки .gz. Из-за этого у вас будут проблемы (впрочем можно потом переименовать в просто .tar).
и ещё - вы НЕ сжимаете, но расширение у вас таки .gz. Из-за этого у вас будут проблемы (впрочем можно потом переименовать в просто .tar).
Да, но я ставил просто .tar, ну и имя у меня не archive естественно...
[console]tar -czvf ../arc.tgz .[/console]
Это надо тоже попробовать, спасибо.
Да, и этот вариант работает.