Руководство
Файлы ._ на телефоне Android и как от них избавиться
Скопируйте музыку или фото с Mac, и у каждого файла появится двойник, имя которого начинается с точки и подчёркивания. Они безвредны, не являются копиями, и избавиться от них легко.
Вы скопировали альбом с Mac на телефон или заполнили SD-карту в кардридере. Теперь музыкальный плеер показывает каждый трек дважды, один раз как Track 01.mp3 и второй как ._Track 01.mp3, и второй не воспроизводится. Галерея показывает серые квадраты. Файловый менеджер показывает файл на 4 KB рядом с каждым настоящим.
Это файлы AppleDouble. Их записал ваш Mac, и с телефоном всё в порядке.
Что такое файл ._
Файл на Mac несёт больше, чем своё содержимое. macOS прикрепляет к нему расширенные атрибуты: тег Finder, веб-адрес, откуда был скачан файл, флаг карантина, из-за которого Gatekeeper спрашивает «Вы действительно хотите открыть его?», а для некоторых старых файлов ещё и ветвь ресурсов. APFS, собственная файловая система Mac, хранит всё это внутри файловой системы, незаметно для вас.
FAT32 и exFAT не умеют хранить ничего из этого, а именно в этих форматах почти все SD-карты и флешки. Поэтому, когда macOS копирует на них файл, она кладёт атрибуты в отдельный файл рядом, с именем исходного файла и ._ впереди. Этот файл-спутник и есть файл AppleDouble. Обычно он занимает ровно 4 096 байт, каким бы ни был размер файла, которому он принадлежит.
Mac скрывает любой файл, имя которого начинается с точки, поэтому на Mac вы их никогда не видите. Android скрывает их в одних местах и не скрывает в других. Файловые менеджеры показывают их, если включить показ скрытых файлов, а музыкальные плееры и автомагнитолы, которые сами читают папки, часто пытаются их воспроизвести.
Как они попадают на телефон
| Как файлы туда попали | Остаются файлы ._ | Остаются файлы .DS_Store |
|---|---|---|
| SD-карта или флешка, заполненная на Mac | Да, по одному на файл | Да, в папках, открытых в Finder |
| Приложение для MTP, например Android File Transfer или OpenMTP | Нет, MTP передаёт только содержимое | Только если такой файл есть в копируемой папке |
| Телефон, смонтированный в Finder через SideMount | Нет, на телефоне они отклоняются | Нет, тоже отклоняются |
Обычно они приходят через кардридер. Заполните карту на Mac, вставьте её в телефон, и у каждого скопированного файла будет двойник. Папки, которые вы открывали в Finder, к тому же получают файл .DS_Store, где хранятся настройки вида окна.
Можно ли их удалять?
Да. Файл ._ хранит только метаданные Mac о соседнем файле, никогда не его содержимое, и на телефоне его ничто не читает. Удалив его, вы потеряете тег Finder или адрес загрузки, которыми когда-либо воспользовался бы только Mac.
Но посмотрите, прежде чем удалять. Настоящий файл тоже может начинаться с ._, хоть и редко, поэтому сначала выведите их список и проверьте, что он такой, как вы ожидаете.
Как их удалить
С SD-карты или флешки, на Mac
Когда карта смонтирована, откройте Терминал и выведите их список, подставив имя карты вместо CARD:
find /Volumes/CARD -name '._*' -type f
Если список выглядит правильно, удалите их:
find /Volumes/CARD -name '._*' -type f -delete
В macOS для этого есть и собственный инструмент, dot_clean. Команда dot_clean -m /Volumes/CARD возвращает в файлы то, что может, а затем удаляет все файлы ._.
С самого телефона
Если включена отладка по USB и установлен adb, те же два шага работают и с памятью телефона:
adb shell find /sdcard -name '._*' -type f
adb shell find /sdcard -name '._*' -type f -delete
Без компьютера их можно удалить вручную в файловом менеджере на телефоне, если включить в нём показ скрытых файлов. Поиск по ._ найдёт их все.
Как не дать им вернуться
Нет настройки, которая запретила бы macOS записывать файлы ._ на карту FAT или exFAT. Изменить можно то, что вы копируете, или то, как вы это делаете.
- Копируйте без атрибутов. В Терминале
cp -Xкопирует файлы без расширенных атрибутов, так что файлу-спутнику нечего хранить. Finder всегда копирует их. - Сначала удалите атрибуты.
xattr -cr ~/Music/Albumснимает все расширенные атрибуты с папки перед копированием. Сами файлы не меняются. - Копируйте по кабелю, а не через карту. Приложение для MTP передаёт только содержимое каждого файла. SideMount монтирует телефон в Finder и не пускает на него файлы
._и.DS_Store, так что копия из Finder приходит чистой.
С SideMount Finder может читать и записывать теги файлов на телефоне, пока он смонтирован. Атрибуты остаются на Mac, в памяти, и сбрасываются, когда вы извлекаете телефон, а телефон всегда получает только файлы. Руководство по настройке описывает первое подключение, а в статье обо всех способах передать файлы между Android и Mac сравниваются пути.
Вопросы
Почему каждый файл ._ занимает 4 KB?
Файл AppleDouble состоит из небольшого заголовка с местом для атрибутов, и macOS записывает его одним блоком в 4 096 байт, каким бы ни был размер файла, которому он принадлежит. Файл с большой ветвью ресурсов может быть больше.
Повредит ли их удаление моим фото или музыке?
Нет. Фото или трек хранится в файле без ._ в начале имени. Файл-спутник содержит только метаданные Mac, например теги Finder, так что телефон и его приложения ничего не теряют.
Создаёт ли Android File Transfer файлы ._?
Нет. MTP, протокол, которым он пользуется, передаёт только содержимое каждого файла, так что класть в файл-спутник нечего. Файлы ._ появляются на картах и дисках, которые монтирует Mac. Правда, Google больше не предлагает Android File Transfer: смотрите, чем его заменить.
Сохраняются ли теги Finder на телефоне, смонтированном через SideMount?
Пока он смонтирован, да. SideMount хранит теги и другие атрибуты на Mac, в памяти, поэтому Finder работает как обычно. После извлечения телефона они исчезают, потому что сам телефон их никогда не хранит.