I file VCF, come forse molti di voi sapranno, sono files contenenti informazioni di uno o più contatti di rubrica: praticamente l’equivalente virtuale di un biglietto da visita. La loro diffusione nasce, a mio avviso, dal fatto che sono abbastanza (sottolineo: abbastanza) standard (formato vCard) e sono composti in semplici caratteri di testo (ovvero possono essere perfino creati e modificati a mano con un normale editor di testo).
La possibilità della rubrica indirizzi di MacOsX di esportare i contatti in VCF è dunque interessante ai fini della compatibilità con altri sistemi, ma prevede una limitazione: se tento di selezionarne più d’uno e poi eseguire l’esportazione (Archivio -> Esporta vCard) il risultato non saranno dei singoli files ma un unico VCF contenente in sequenza tutti i contatti. Problema: le implementazioni più rigorose del formato vcf (ad esempio quelle dei cellulari) prevedono la presenza di un solo contatto per file. Come aggirare questo problema? Selezionare ed esportare un contatto alla volta, dando ogni volta un nome diverso e sprecando così la mia vita mortale esportando centinaia di contatti?
Ovviamente no. I potenti mezzi del Terminale ci forniscono la possibilità di suddividere e rinominare comodamente il contenuto del VCF “di gruppo” in pochi e semplici (!?!) passaggi.
1) Selezionare tutti i contatti, Archivio -> Esporta vCard, salvare il file “Schede.vcf” in una cartella dedicata.
2) Da terminale, suddividere il file in più spezzoni ciascuno dei quali contiene un contatto.
csplit -n3 -k Schede.vcf /END:VCARD/1 {1000}
3) i singoli file saranno nominati con il metodo di default: xx + numero d’ordine. L’ultimo file sarà in più e quindi vuoto (a causa del metodo di separazione utilizzato in precedenza). Possiamo andare a cancellarlo a mano, o possiamo usare uno script che analizza tutti i file alla ricerca di quello (o quelli) con dimensioni nulle:
for i in $(ls xx*); do
a=$(du $i);
a=$(echo $a | cut -d’ ‘ -f1);
if [ "$a" = "0" ]; then
rm $i;
fi;
done
Molto più divertente, no? Scherzi a parte, è anche tutto automatico, il che rende possibile utilizzarlo in uno script.
3) Per concludere, possiamo rinominare i files (xx[numero]) con il FN (ovvero il nome visualizzato) del contatto che contengono. A questo scopo si può usare questo sistema:
for i in $(ls xx*); do
a=$(cat $i | grep FN | sed -e ’s/FN://g’ | sed -e ’s/ /_/g’);
mv $i $a.fn;
done
Ecco fatto.. purtroppo il sistema non è perfetto e alcune schede non riuscirà a convertirle, vuoi perchè manca il FN o perchè questo contiene caratteri che al terminale non piace. Per queste poche eccezioni bisognerà procedere a mano, ma il grosso del lavoro è svolto automaticamente. Comodo, no?





















