Поиск строк в (.gz )заархивированной папке с файлами в ней

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

ISO-образ немного отличается. Это файл, созданный из набора каталогов и файлов, определенных любым способом,для того, чтобы быть блоком -на блоке -точной копией CD/DVD/Blu -Ray, созданного из этих данных , будет . Он включает метаданные файловой системы ISO9660, созданные во время создания образа ISO.

Формат образа ISO существует потому, что устройства записи компакт-дисков изначально могли записывать на диск только в режиме последовательного -доступа и не могли останавливаться в середине операции записи , не разрушая диск. Таким образом, вы не могли записать один файл здесь, а другой там, создавая его по ходу дела :, вы должны были иметь все файлы и все метаданные, которые составят ваш компакт-диск -ROM (или аудио компакт-диск ). ] указывается заранее, вплоть до последнего байта, перед запуском записывающего лазера, а затем записывает весь диск или, по крайней мере, полные данные или звуковую дорожку за один раз. Это было нормально для массового производства прессованных аудио компакт-дисков и компакт-дисков -.

(Затем были введены компакт-диски -R, и оказалось неудобным тратить весь диск впустую, даже если у вас нет полных 650 МБ для записи... поэтому была разработана многосессионная запись компакт-дисков -. Позже более плавная технология начала/остановки записи позволила разработать пакетную запись для CD -RW, а файловая система UDF была разработана для оптимизации... но я отвлекся.)

Вы не можете создать файл изображения из каталога точно так же, как из целой файловой системы. Образ файловой системы включает в себя метаданные файловой системы, описывающие, какие блоки выделены, а какие свободны, а также физическое расположение каждого блока каждого файла и каталога на блочном устройстве, содержащем файловую систему. Эта информация имеет смысл только в контексте остальной части файловой системы.

Попытка скопировать эту информацию без копирования остальной части файловой системы была бы практически бесполезна :при восстановлении файлов из такого образа в новую файловую систему,вам придется игнорировать исходную информацию о расположении блоков и позволить драйверу файловой системы размещать файлы и каталоги в соответствии с тем, какие блоки в целевой файловой системе свободны. В противном случае вы можете перезаписать и повредить существующие файлы и/или каталоги при восстановлении вашего «образа».

Таким образом, при создании образов каталогов, а не полных файловых систем, имеет смысл хранить только (относительные )имена путей, владельцев файлов и каталогов, разрешения и другие атрибуты, а также данные внутри файлов. И когда вы разработаете формат файла, оптимизированный для этого, вы получите архивный файл :, например, файл .tar. Добавьте к этой концепции сжатие, и вы получите файл .tar.gzили .zipили любой из многочисленных форматов сжатых архивных файлов.

Циклическое устройство не требуется при создании файлов изображений :для создания образа файловой системы, вы просто читаете все блоки блочного устройства, содержащие эту файловую систему, в порядке от начала до конец и запишите их все в один файл, при этом гарантируя, что файловая система, на которую создается образ, не будет изменена в процессе создания образа.

Петлевое устройство позволяет осуществлять доступ к содержимому файла изображения без его записи в "реальное" блочное устройство.

0
11.01.2019, 17:34
1 ответ

Это распечатывает список файлов внутри архива, соответствующих заданному шаблону:

tar --ignore-command-error -xvf PROD_009_010919_0110.tar.gz --to-command="grep -FH 1234536 -" | grep -B1 --no-group-separator '(standard input)' | grep -v '(standard input)'

Опция --to-commandизвлекает каждый файл и отправляет на стандартный ввод команды grep. Опция -vперечисляет каждый файл по мере их обработки.

--ignore-command-errorиспользуется для игнорирования статуса выхода, когда grepне может найти соответствие. Из-за опции -H(печатать имя файла ), используемой с командой grep, каждая совпадающая строка имеет префикс '(стандартный ввод )'.

Это приводит к следующему выводу команды tar:

file1
file2
(standard input): <matched lines from file2>
file3
(standard input): <matched lines from file3>

Передача этого вывода по конвейеру позволяет двум командам grepизвлекать только имена файлов, за которыми непосредственно следует строка ' (стандартный ввод )' на следующей строке. Эту обработку, вероятно, можно было бы улучшить, используя регулярное выражение для соответствия шаблону вместо двух последовательных команд grep, которые я использовал здесь.

Результирующий вывод в этом случае будет:

file2
file3
1
28.01.2020, 02:41

Теги

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