- Saved searches
- Use saved searches to filter your results more quickly
- BoarderEB/vcf2csv
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- nix script
- Начнём с форматов.
- VCF — формат VCARD 3.0.
- CSV
- Переходим к скриптам
- Сервисы
- Статьи
- Видео
- Подсказки (Tips)
- Контакты
- хостинг
- Vcf to csv linux
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
BoarderEB/vcf2csv
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
vcf2csv — convert vcf to csv file
The converter is based on VCard version 4 RFC6350 — but also works with version 3
python3 vcf2csv.py -p -i vards.vcf -o contacts.csv
-i = Specified the Infile like -i vards.vcf -o = Specified the Outfile like -o contacts.csv -e = Specified the Encoding of the files like -e "UTF-8" [default = UTF-8] -l = logs go to stdout -p = Add Photos to csv from vcf. --TelNoTyp = Telephone numbers are only converted as Tel0, Tel1, Tel2 and TelFax --MustHaveUid = If there no Uid don't write Vcard to csv-File
Currently this data is being converted:
Name | GivenNames | AdditionalNames | Prefixes | Suffixes |
---|
Is Base64-Encodet-Img or a URL
PostOfficeBox | PostOfficeBoxWork | PostOfficeBoxHome |
---|
ExtendedAddress | ExtendedAddressWork | ExtendedAddressHome |
---|
Street | StreetWork | StreetHome |
---|
City | CityWork | CityHome |
---|
Region | RegionWork | RegionHome |
---|
PostalCode | PostalCodeWork | PostalCodeHome |
---|
Country | CountryWork | CountryHome |
---|
TelVoiceWork | TelVoiceHome | TelVoice0 | TelVoice1 | TelVoice2 | TelVoice3 |
---|
TelFaxWork | TelFaxHome | TelFax0 | TelFax1 | TelFax2 | TelFax3 |
---|
TelCellWork | TelCellHome | TelCell0 | TelCell1 | TelCell2 | TelCell3 |
---|
TelTextWork | TelTextHome | TelText0 | TelText1 | TelText2 | TelText3 |
---|
TelVideoHome | TelVideoHome | TelVideo0 | TelVideo1 | TelVideo2 | TelVideo3 |
---|
TelPagerWork | TelPagerHome | TelPager0 | TelPager1 | TelPager2 | TelPager3 |
---|
TelTextphoneWork | TelTextphoneHome | TelTextphone0 | TelTextphone1 | TelTextphone2 | TelTextphone3 |
---|
CSV-Header Option: —TelNoTyp:
If more than 3 Numbers, they are appended in Tel2
EmailWork | EmailWork | EmailHome | Email0 | Email1 | Email2 | EmailPref |
---|
In the RFC each email address can have a preference. Only the Email with the heigest preference is linkt in the field «EmailPref»
nix script
На работе возникла задача привести в порядок адресную книгу E-Mail. Выгрузил в формате VCARD 3.0, понял, что проще застрелиться, чем пытаться вручную привести в порядок. Соответственно взялся за то, что под рукой. А под рукой всемогущий BASH. )))
Проблема усугублялась наличием большого количества абсолютных дублей адресов, так как адресную книгу слепил из трех книг от разных сотрудников. Но успокаивало то, что можно загнать всё в формат CSV, который открывается Экселем и LibreCalc, соответственно разгребать бардак можно не только мне.
Начнём с форматов.
VCF — формат VCARD 3.0.
Довольно простой текстовый формат, где данные поделены на отдельные строки и содержат в начале тег-описатель. Пример:
BEGIN:VCARD VERSION:3.0 UID:XXXXXXXXXXX EMAIL:email1@host.tld EMAIL:email2@host.tld EMAIL:email3@host.tld FN:Имя Получателя N:Подробная;Информация;5;Полей;Вроде бы END:VCARD
И каждый контакт описывается таким набором строк.
CSV
Простейший формат хранения таблиц и массивов. Строки содержат значения полей таблиц, разделённые каким-либо символом-разделителем. Чаще всего, символ разделитель — точка с запятой. Но так как в формате VCARD этот разделитель задействован для разделения полей подробной информации, я выбрал символ табуляции, что вполне допустимо.
Переходим к скриптам
И так, скрипт первый. vcf2csv. С комментариями, чтобы не просто скопипастить, а подумать, понять и применять:
#!/bin/bash # Делаем условие по ключу -2, которое # выдаст первой строкой заголовки таблиц. # Расчёт на то, чтобы можно было загнать # в один CSV несколько VCF. # В качестве разделителя полей выбрана табуляция. if [[ $2 == "-1" ]]; then echo "UID EMAIL FN N" | tr -d "\n"; fi # Теперь идёт конвейер. # * SED удаляет ненужное из строк и некоторые строки # * tr удаляет перевод строки и возврат # корретки # * SED вставляет перевод строки # в нужном месте, разделяя один контакт от # другого # * SED обрабатывает поле адреса e-mail # * SED всавляет разделителем адресов # точку с запятой # * . два раза, поскольку # адресов бывает три на один контакт # * sort сортирует всё таким образом, чтобы # одинаковые строки шли друг за другом # * uniq удаляет дубли, остовляя все строки в единственном экземпляре sed -e ' /BEGIN:VCARD/d s/VERSION:3.0/*/ s/UID:// s/EMAIL:/ EML:/ s/FN:/ / s/N:/ / /X-SOCIALPROFILE/d /BDAY/d /X-YA/d /END:VCARD/d' "$1" | tr -d "\r\n" | sed "y/*/\n/" | sed "s/ EML:/ /1" | sed "s/ EML:/;/" | sed "s/ EML:/;/" | sort | uniq
Вызов производится таким образом:.
vcf2csv vcards.vcf -1 >vcards.csv vcf2csv vcards1.vcf >>vcards.csv vcf2csv vcards2.vcf >>vcards.csv
В этом примере три файла карточек объединяются в один CSV. Заметьте, первый вызов скрипта идёт с ключом -1. Этот ключ обязательно должен быть вторым аргументом. Иначе не будет работать правильно. Можно доделать, додумать, создать защиту от дурака, но оставлю это вам. )))
Скрипт второй. csv2vcf. Он вернёт обработанные и открректированные контакты в VCF для загрузки в почтовый клиент.
#!/bin/bash # Получаем файл CSV первым аргументом и # грузим в переменную LIST=$(sed '1d' "$1") # Указываем разделителем перевод # строки, чтобы проедставить содержимое # переменной LIST как массив для обработки # в цикле. IFS=$" " # Начинаем цикл, обрабатывающий каждую # строку отдельно for ROW in $LIST do # Получаем первое поле, которое содержит UID U=$(echo "$ROW" | cut -d " " -f1) # Далее второе поле с адресами e-mail E=$(echo "$ROW" | cut -d " " -f2) # Теперь разделяем адреса на отдельные строки EML="$" # Получаем текст представления адресата F=$(echo "$ROW" | cut -d " " -f3) # И подробную информацию о контакте, # разделённую точкой с запятой N=$(echo "$ROW" | cut -d " " -f4) # Остаётся лишь выдать это в # правильном, для формата VCF виде echo -e "BEGIN:VCARD\r\nVERSION:3.0\r\nUID:$\r\nEMAIL:$\r\nFN:$\r\nN:$\r\nEND:VCARD" done
Вызов делается проще чем с первым скриптом:
csv2vcf vcards.csv >vcarsd-result.vcf
Вот и всё. Относительно просто, мы экономим от двух дней до недели ковыряния в адресной книге клиента. В моём случае, это веб-клиент Яндекса.
Статья написана в формате MarkDown и сконвертирована в HTML с помощью скрипта Parsedown.
Сервисы
Статьи
- Bash-it
- Отправка письма в терминале через Яндекс
- Снапшот корня btrfs при обновлении системы
- Настройка веб-сервера Caddy с PHP на чистом Termux
- Выхлоп Chromium *chrome://gpu из TermuxArch
- Работаем с файлами скачанными с Google Photo
- Создаем свой дистрибутив Manjaro
- Лечим нерабочие сочетания клавиш в mc
- Отображение состояния смартфона (Android) на сайте
- Доступ к компу из интернета без DDNS и покупки доменного имени
- Оповещение о бекапах
- Программирование языком автолюбителя
- Подготовка поста в соц.сеть. Развитие.
- SVG Введение. Структура файла.
- SVG Простые фигуры
- SVG Пути (линии Безье, кривые)
- SVG Кроим код через bash
- Синхронизация папок с помощью bash и rsync
- TermuxArch установка
- Конвертер VCARD (VCF 3.0) ⧎ CSV
- watch-srv — Скрипт уведомлений о входе на сервер.
- VNC на XFCE4
- Ставим X на TermuxArch
Видео
Подсказки (Tips)
Контакты
хостинг
Новым клиентам скидка 25% на первый месяц по этой 👉 ссылке или по промокоду: 648148526
Vcf to csv linux
vcf2csv is a command line tool to convert vcard files to html or csv. Thus you may call it vcf2html also.
The input source is a regular file and the output is written to stdout.
The program is written in ANSI-C and should be compiled smoothly on most systems.
This project is under heavy development.
vcf2csv is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
vcf2csv is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with vcf2csv. If not, see .
The output is generated in two steps:
First, the whole input file is parsed to identify all used types in all vcards. A type is a data field like «CLASS», «EMAIL», «ADR;TYPE=home» and so on. Thus all used types do appear in the output.
Second, the file is parsed again: each particular vcard included in the file is read.
Once all values of this vcard are assinged to their corresponding type, it is written to stdout immediately.
While reading the values there may be done some conversions: as described in rfc2426 (2.6) a line «[. ] longer than 75 characters SHOULD be folded according to the folding procedure described in [MIME DIR].»
If a folded line is detected, the new line characted ‘\n’ is converted to the text value «\n».
If you want to ommit some types you can use a drop list. For example:
vcf2csv -d ‘ADR;,PHOTO;VERSION;’ -i vcards.vcf -w > output.html
This example ommits all types containing the string «ADR;», «PHOTO;» or «VERSION;» and creates a simple html file displaying your vcards in a table, each by a single row.
GPL v3 (or any later version).
You should have received a copy of the GNU General Public License along with vcf2csv. If not, see .
option | description |
---|---|
-d LIST | comma separated list of types to drop, e.g. -d ‘ADR;TYPE=,X-KPILOT,PHOTO;,LABEL;TYPE=work’ The contents of the list are handled case sensitive. If a content of this list is a substring of a type, this type is dropped. |
-h | print help |
-i | input file (required) |
-v | print version |
-w | web output, create html instead of csv |
The easiest way to use it for web output is to create an alias:
convert vcard.vcf to csv, write output to out.csv:
Here you see a sample result:
convert vcard.vcf to html file out.html:
Here you see a sample result using vcf2csv.css (provided by package) for page formatting:
Use a drop list to strip TYPEs:
If you want to prevent some types to be converted, the are specified by a drop list. For example, a PHOTO uses a lot of space an should not apper in the resultig csv list. In this case use ‘-d’ to drop all types containing the string PHOTO:
The drop list is a comma separated list of values. It is handled case sensitive and may be a substring of the type to drop.
Let’s take a look for a more complex example:
you want to drop all types containing the substring x-, all photos and all addresses of the type home.
A vcard stores this information in these types:
X-KADDRESSBOOK-X-IMAddress:www.somepage.com
X-KADDRESSBOOK-X-SpousesName:somename
ADR;TYPE=home:some;private;;address;information
PHOTO;ENCODING=b;TYPE=image/jpeg:/9j/4AAQSkZJRgABAQIAA.
All you have to know are the strings in front of the colon.
Here you see a command line to generate a simple web page and drop these types: