LinuxForum.Fans
Тема

Tar - Слишком длинный список аргументов

Автор: valet 18 сообщений 3774 просмотров
#225675

Задача - упаковать очень большое количество файлов в 1.
Перехожу в каталог, в котором находится 150 тысяч файлов и делаю:
[console]tar -cf arhiv.tar *[/console]
Выдает:
[console]Слишком длинный список аргументов[/console]

Вариант делать так:
[console]tar -cf arhiv.tar catalog/[/console]
то есть если не указываем * а просто каталог, в котором файлы
работает, но мне не подходит, так как не нужна эта лишняя вложенность в каталог. Потом если распакую - придется переносить mv и возникнет та же проблема.

Подскажите как это решить.

#225676

Нагуглил варианты решения похожих проблем для mv, cp, rm - но там несколько другое - там работа происходит поэлементно, поэтому можно использовать скажем find. Нагуглить проблему: Слишком длинный список аргументов для tar не удалось. Думаю, если проблема будет здесь решена - она будет в топе гугла по этому запросу :)

#225678
text
 find . -print0 | xargs -0 tar cvf /tmp/archive.tar

Запускать в текущем каталоге, архив будет в /tmp

#225679

Lupo Alberto, спасибо. Отлично работает.
Я правда делаю даже так:
[console]nice -n 19 ionice -c 3 find . -print0 | xargs -0 tar cvf archive.tar[/console]
Это еще чтобы нагрузки не было.
Вопрос снят.

#225683

valet, вы к архиву путь отличный от текущего укажите, а то при следующем архивировании будет «тарить затаренное» wink

#225703

valet, попробуйте так:
tar -C 'каталог источника' -cvf archive.tar.gz .

#225716
Lupo Alberto написал:
valet, вы к архиву путь отличный от текущего укажите, а то при следующем архивировании будет «тарить затаренное»

Да, кажется это и произошло :(
Создало 30 Гб архив - я постоянно мониторил его размер - архив рос вплоть до 30 Гб. А потом была остановка - очевидно список файлов закончился и удалялся 30 Гб-ый архив. - и начало все заново - архив начал набирать размер с 0-я. Как бы я так понимаю по кругу пошло.

Сейчас попробую.

#225722

Обидно - долго создавало 30 Гб архив, поставил заново...

#225723
valet написал:
Перехожу в каталог, в котором находится 150 тысяч файлов и делаю:

это вы зря. Так не принято делать, надо было перейти чуть выше, и тарить каталог.

merheaste написал:
tar -C 'каталог источника' -cvf archive.tar.gz .

опция -C для других случаев придумана.

#225760
Lupo Alberto написал:
find . -print0 | xargs -0 tar cvf /tmp/archive.tar

Этот метод не работает, опять затарило все и пересоздало файл и заново начало тарить. На этот раз я указывал каталог, отличный от текущего. Чувствую этот метод не работает - тарятся файлы по кругу...

merheaste написал:
tar -C 'каталог источника' -cvf archive.tar.gz

Сейчас этот метод попробую.

Нет, выдает:
tar: Робкий отказ от создания пустого архива
Попробуйте `tar --help' или `tar --usage' для
получения дополнительной информации.

#225768
valet написал:
Этот метод не работает, опять затарило все и пересоздало файл и заново начало тарить. На этот раз я указывал каталог, отличный от текущего. Чувствую этот метод не работает - тарятся файлы по кругу...

В аргументах команды find указан текущий каталог, т.е. "." точка; архив создаётся в /tmp. Как он может опять "затариться"?

#225769
valet написал:
Сейчас этот метод попробую.
Нет, выдает:
tar: Робкий отказ от создания пустого архива

В конце команды пропущена точка (после имени архива пробел, за ним точка):

text

tar -C 'каталог источника' -cvf archive.tar.gz .
#225771

[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]

#225773
Lupo Alberto написал:
В аргументах команды find указан текущий каталог, т.е. "." точка; архив создаётся в /tmp. Как он может опять "затариться"?

Не знаю - сначала у меня действительно стояла просто название архива, то есть в текущий каталог. При этом пошло по кругу, архив набрав 30 Гб - именно такой размер всех файлов там, начал заново набираться.

Прочитав ваше сообщение, я тупо все это дело еще раз запустил, указав уже полный путь - в другой каталог - но результат оказался тот же.

#225774
Lupo Alberto написал:
В конце команды пропущена точка (после имени архива пробел, за ним точка):

Да, спасибо, я как-то не заметил. С точкой вроде работает. О результатах отпишусь, пока пошло дело.

#225780

Да, метод
[console]tar -C 'каталог источника' -cvf archive.tar.gz .[/console]
рабочий. Вопрос снят.

#225781
valet написал:
Да, метод
tar -C 'каталог источника' -cvf archive.tar.gz .

...называется "удаление гланд ректально".
если вы в источнике, достаточно
[console]tar -czvf ../arc.tgz .[/console]
и ещё - вы НЕ сжимаете, но расширение у вас таки .gz. Из-за этого у вас будут проблемы (впрочем можно потом переименовать в просто .tar).

#225784
drBatty написал:
и ещё - вы НЕ сжимаете, но расширение у вас таки .gz. Из-за этого у вас будут проблемы (впрочем можно потом переименовать в просто .tar).

Да, но я ставил просто .tar, ну и имя у меня не archive естественно...

[console]tar -czvf ../arc.tgz .[/console]
Это надо тоже попробовать, спасибо.

Да, и этот вариант работает.

Войдите или зарегистрируйтесь, чтобы ответить.