Каталог Tar в независимые архивные файлы не более определенного размера

В GNU-реализации grep для этого есть опция -h / - no-filename .

$ grep -rc PATTERN .
./b:1
./a:0
./1/2/c:2
$ grep -rhc PATTERN .
1
0
2

Переносимый / стандартный эквивалент:

$ find . -type f -exec grep -c PATTERN {} \;
0
2
1

но означает выполнение одного вызова grep для каждого файла.

Если вместо этого вам нужно общее количество вхождений (здесь 1 + 2 = 3), вы можете сделать (переносимо):

$ find . -type f -exec cat {} + | grep -c PATTERN
3

(обратите внимание, что если в некоторых файлах есть данные после их последней строки (так что не -текстовые файлы), что может испортить результат)

Или с помощью grep , поддерживающего -r , как у вас:

$ grep -r PATTERN . | wc -l
3
5
08.05.2016, 22:31
1 ответ

tar может обрабатывать частичные архивы после разделения. Когда вы пытаетесь восстановить часть такого архива, он пропускает все, что не может использовать в начале, и сообщает вам о любом частичном файле в конце; все, что между ними, будет восстановлено должным образом. Вы можете указать tar разбивать архивы по мере их создания, используя параметры длины ленты; см. Создайте tar-архив, разделенный на блоки максимального размера , для получения подробной информации.

Существуют утилиты, которые работают лучше, чем это, и создают отдельные части архивов (при условии, что предельный размер достаточен для хранения самого большого файла в архиве); к сожалению, те, о которых я знаю, не отвечают всем вашим требованиям. На большинстве платформ есть zipsplit , который может разделять zip-файлы, но справляется только с архивами размером до 2 ГБ. В Plan 9 есть tarsplit , который разбивает архивы, но я не уверен, что его можно легко перенести на любую используемую вами систему (я подозреваю, что вы не используете Plan 9 ...).

4
27.01.2020, 20:41

Теги

Похожие вопросы