Meu objetivo é ler o banco de dados macOS Photos.app para descobrir os caminhos das fotos incluídas. O álbum e a pasta pai cujo nome está na tabela RKFolder podem ser determinados para cada foto. Essa pasta pai pode estar localizada em outras pastas. O caminho da pasta resultante também pode ser lido ... mas da seguinte forma:
modelId 1/modelID 2/modelId 3/modelID 4
E aqui não posso ir mais longe, porque não tenho conhecimento suficiente para substituir a string pelos nomes verdadeiros das pastas. Para possíveis soluções, deve-se notar que eu trabalho com uma cópia do banco de dados e, portanto, o caminho da pasta também pode ser gravado diretamente na tabela RKFolder.
SELECT
modelId, name,folderPath, uuid
FROM RKFolder
WHERE implicitAlbumUuid not NULL
resulta em (excerto)
modelId name folderPath uuid
1 1/ LibraryFolder
2 TopLevelAlbums 1/2/ TopLevelAlbums
7 Test 1/2/7/ kbY7RDHjRLS
8 xxx 1/2/8/ bT5WAkPWQ1
9 Test 1/2/8/9/ 9PYeLZDRTne
10 ab 1/2/10/ 7Cse21+1SIag
11 abc 1/2/7/11/ pNMvzDdyS%
16 efg 1/2/7/11/16/ a6R97tAxSBW
substitua assim:
modelId name folderPath uuid
1 / LibraryFolder
2 TopLevelAlbums /TopLevelAlbums/ TopLevelAlbums
7 Test /TopLevelAlbums/Test/ kbY7RDHjRLS
8 xxx /TopLevelAlbums/xxx/ bT5WAkPWQ1
9 Test /TopLevelAlbums/xxx/Test/ 9PYeLZDRTne
10 ab /TopLevelAlbums/ab/ 7Cse21+1SIag
11 abc /TopLevelAlbums/Test/abc/ pNMvzDdyS%
16 efg /TopLevelAlbums/Test/abc/efg/ a6R97tAxSBW
ou ainda melhor sem a pasta principal TopLevelAlbums:
modelId name folderPath uuid
16 efg /Test/abc/efg/ a6R97tAxSBW
Aqui o script que eu uso até agora (encurtado):
SELECT
RKAlbumVersion.versionId,
RKVersion.filename,
(SELECT RKFolder.folderpath from RKFolder, RKAlbum
WHERE RKFolder.uuid = RKAlbum.folderUuid
and RKAlbum.modelID = RKAlbumVersion.albumId)
FROM RKMaster, RKAlbumVersion, RKVersion
WHERE RKVersion.modelId = RKAlbumVersion.versionId
and RKVersion.masterUuid = RKMaster.uuid
-->
Output:
77 001.JPG 1/2/7/11/16/
replace with:
77 001.JPG /Test/abc/efg/
Tags grep sed sqlite regular-expression