Поиск int
или unsigned int
и последующее исключение всего найденного, содержащего =
, указывающее на то, что инициализируется, похоже, он должен выполнить свою работу.
grep -E '^int|^unsigned int' myfile.txt | grep -Ev '='
Фактически, tar может исключать файлы с - привязанными
шаблоны соответствуют имени файла start
Но затем вам нужно записать полный путь к файлу (который также изменяется с cd
):
$ cd /where/source/lives
$ tar -cf master.zip --anchored --exclude={source/install.sh,README.md} -- *
Если вам нужна некоторая гибкость, используйте find.
Список файлов для сжатия можно создать с помощью этой команды
! -name README.md
отклоняет базовый файл README.md
:
$ path="/path/to/files"
$ find "$path/" ! -path "$path"/README.md -print
Будьте осторожны с косыми чертами /
, они имеют значение.
Если он содержит правильный список файлов для сжатия, затем просто введите его в tar
(добавьте 0
в -print
и создайте команду tar
):
find "$path/" ! -path "$path"/README.md -print0 |
tar --no-recursion --null -T- --exclude=install.sh -v -cf master.zip
Обратите внимание, что tar
использует параметр - null
для сопоставления с -print0
из find
.
Поскольку find
предоставляет всю необходимую рекурсию, используйте параметр tar - без рекурсии
.
Кроме того, файл install.sh
по-прежнему исключен из tar
(который также мог быть удален с помощью find
, но это только личное предпочтение).
В процессе эксплуатации удалите параметр -v
, чтобы получить менее подробную команду tar.
Чтобы распаковать (вместо сжатия, как указано выше), используйте следующее:
tar -xf master.zip --anchored --exclude={source/install.sh,README.md}
Или, если вы используете второй вариант для создания сжатого файла, исключенные файлы не будут внутри master.zip
и все, что вам нужно сделать, это:
tar -xf master.zip
Кто-то может предложить лучший ответ, но если параметр tar - exclude
не сокращает его, вы можете использовать find
, чтобы сгенерировать список файлов, а затем подать что tar
. Например:
find * -path README.md -prune -o -print |
tar --no-recursion -cf /tmp/data.tar -T-
Это распечатывает список всех файлов (и каталогов), не относящихся к верхнему уровню README.md
, а затем передает их в tar
, который читает его список файлов из stdin
(с использованием -T-
). Флаг - без рекурсии
необходим, потому что в противном случае tar
автоматически включит все файлы в каталогах, которые вам не нужны, потому что эти файлы также будут созданы с помощью find
, и в результате в архиве останется несколько файлов с одинаковым именем.
Более надежная версия может выглядеть так:
find * -path README.md -prune -o -print0 |
tar --no-recursion -cf /tmp/data.tar --null -T-
Здесь -print0
to find
и - null
to tar
означает, что имена файлов будут разделены символами ASCII NUL, а не пробелами, что означает, что конвейер будет обрабатывать имена файлов, содержащие пробелы.
Утилита pax
имеет функцию исключения, которая немного шире, чем BSD tar. Ее опция -s
позволяет преобразовывать имена при их сохранении или извлечении, и если имя преобразуется в пустую строку, файл исключается.
(BSD tar имеет несколько похожую опцию -s
, но, судя по документации, она не имеет функции исключения на пустом месте.)
zcat foo.tar.gz | pax -r -pe -s'!^README\.md$!!' -s'!^\./README\.md$!!'
Обратите внимание, что я предполагаю (возможно, сжатый) tar-файл. Если у вас zip-файл, используйте unzip
вместо этого.
unzip foo.zip -x 'README.md'