Вопрос или проблема
Это возможно? Если да, то как?
Если это важно, я использую macOS Sonoma 14.7.2.
В качестве теста я создал следующую папку:
$ tree tmp
tmp
└── myfile.txt
Затем я создал архив, выполнив:
$ tar -czvf tmp.tar.gz tmp 07:59:02
a tmp
a tmp/myfile.txt
Я запустил следующий код на Python:
import tarfile
tar_file = tarfile.open( "tmp.tar.gz" )
for member in tar_file.getmembers():
print( member )
и он вывел:
<TarInfo '._tmp' at 0x11b938b80>
<TarInfo 'tmp' at 0x11b939000>
<TarInfo 'tmp/._myfile.txt' at 0x11b938c40>
<TarInfo 'tmp/myfile.txt' at 0x11b938ac0>
правильно показывая мне скрытый файл ресурса (._myfile.txt) в архиве.
Однако, когда я пробую несколько вариантов с командой tar, я не могу заставить её показать скрытый файл ресурса.
$ tar -tvf tmp.tar.gz
drwxr-xr-x 0 eric.gorr staff 0 Feb 12 07:58 tmp/
-rw-r--r-- 0 eric.gorr staff 0 Feb 12 07:58 tmp/myfile.txt
$ env COPYFILE_DISABLE=true tar -tvf tmp.tar.gz
drwxr-xr-x 0 eric.gorr staff 0 Feb 12 07:58 tmp/
-rw-r--r-- 0 eric.gorr staff 0 Feb 12 07:58 tmp/myfile.txt
Ответ или решение
Чтобы решить описанную проблему и увидеть скрытые файлы ресурсов (например, ._myfile.txt
) в архиве tar
на macOS, важно понимать, как macOS располагается с такими файлами и какую роль они играют. Эти скрытые файлы создаются macOS для хранения метаданных файла, которые в других системах могут быть размещены непосредственно в файловой системе.
Теория
В macOS каждый файл может иметь два отдельных потока данных: данные файла и "ресурсный форк". Ресурсные форки содержат информацию о метаданных, такой как иконки, и другие графические элементы, используемые приложениями macOS. Когда вы копируете или архивируете файл в macOS, система может создать эти "._" файлы, чтобы сохранять информацию о ресурсах и атрибутах файла, особенно если архивируется в файловую систему, которая не поддерживает потоковую обработку данных так, как HFS+ или APFS.
Пример
В вашем случае вы создали и архивировали каталог на macOS, в которой tar
по умолчанию может создавать эти "._" файлы для совместимости. Когда вы архивировали файл с помощью команды:
tar -czvf tmp.tar.gz tmp
tar
автоматически включил эти скрытые файлы ресурсов вместе с вашими обычными файлами, что и отразилось в выводе вашего Python-скрипта. Однако когда вы используете tar
для просмотра содержимого архива с помощью:
tar -tvf tmp.tar.gz
Вы не видите скрытых файлов ресурсов в выводе. Это происходит, вероятно, из-за того, что используемый вами tar
основан на bsdtar
, который по умолчанию может не отображать такие файлы как часть обычной структуры.
Применение
Вам необходим способ заставить tar
показать также эти скрытые файлы ресурсов в списке. К сожалению, стандартные опции tar
для macOS (в частности bsdtar
) могут ограничивать отображение таких файлов без явных параметров для их идентификации. Однако можно предпринять несколько шагов:
-
Убедитесь в версии
tar
: Убедитесь, что вы используетеgnu tar
, а неbsdtar
, так как поведение может отличаться. Чтобы установить GNU tar на macOS, можно использовать Homebrew:brew install gnu-tar
После установки обратитесь к нему как
gtar
. -
Просмотр всех файлов напрямую: Используя дополнительный инструмент или скрипт, можно идентифицировать совпадения с этими файлами. Например:
gtar --no-same-owner --no-same-permissions -tvf tmp.tar.gz
Если установлен
gnu tar
, этот вариант может предоставить более детализированный список файлов. -
Обходные пути с
ls
: Поскольку выводtar -t
в вашем случае не показывает эти файлы, возможно, придется рассматривать другие способы для их распознавания на этапе архивации. -
Извлечение и проверка: Особенно полезно извлечь архив и проверить структуру:
tar -xzvf tmp.tar.gz ls -la tmp/
Это покажет скрытые файлы в директории напрямую.
-
Параметр COPYFILE_DISABLE: Этот параметр обычно отключает хранение resource fork информации, например, создавая архив без этих "._" файлов. Когда он установлен в true, это может привести к другому поведению с архивом, но в данном случае вы уже применили его, и разницы не было, так как архивировались все данные.
Таким образом, чтобы обеспечить отображение всех возможных файлов в архиве, для уверенности рекомендуется проверять конфигурацию вашей текущей версии tar
и убедится в соответствии с вашим рабочим окружением и установленными утилитами.
Использование GUI-инструментов для архивации на macOS, таких как Keka или The Unarchiver, может также помочь выявить все включенные в архив файлы на более визуальном уровне с рассмотрением всех скрытых данных.