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