Найти элементы с отсутствующими битовыми потоками в DSpace 6.0 / PostgreSQL

Я пытался экспортировать коллекцию через упаковщик dspace, но это привело меня к исключению java:

Исключение: java. io.FileNotFoundException: / home / dspace / dspace / assetstore / 24/53/70/24537062703407880406826961992454636643 (такого файла или каталога нет)

Я хочу найти (и, возможно, очистить) все эти ссылки между элементами и отсутствующими файлами в магазине активов. Может кто-нибудь дать мне совет. Спасибо.

0
задан 16 April 2019 в 12:11
1 ответ

В конце концов, мне удалось решить проблему. Возможно, это может быть даже лучше, но вот как я решил это: мы экспортировали в текстовый файл (internal_id.txt) пути всех битовых потоков, используя следующий запрос:

select подстрока (b.internal_id для 2) || '/' || подстрока (b.internal_id от 3 до 2) || '/' || подстрока (b.internal_id из 5 вместо 2) || '/' || b.internal_id как bitstream_path из битовый поток b

После этого я проверил существование этих двухпотоков в магазине ресурсов с помощью этого небольшого скрипта:

#!/bin/sh

homedspace=/home/dspace
assetd=$homedspace/assetstore

for i in `cat $homedspace/internal_id.txt`;
do
  bitstr="$assetd/$i"
  if [ ! -f $fbitstr ]; then
    echo "$i"
  fi;
done

Чтобы получить подробную информацию о записях, в которых отсутствуют потоки битов, я использовал следующий запрос

select
    ob.uuid
    ,h.handle
    ,i.item_id
    ,bfr.short_description
    ,mv.text_value
    ,substring(b.internal_id for 2) || '/' || substring(b.internal_id from 3 for 2) || '/' || substring(b.internal_id from 5 for 2) || '/' || b.internal_id as bitstream_path
from
    dspaceobject ob
left join handle h on
    ob.uuid = h.resource_id 
left join item i on
    i.uuid = ob.uuid
left join bitstream b on
    b.uuid = ob.uuid
left join bitstreamformatregistry bfr on
    bfr.bitstream_format_id = b.bitstream_format_id
join metadatavalue mv on
    mv.dspace_object_id = ob.uuid
    and b.internal_id in 
    ('114010604776142507469236848335815822008',
    '144380007015254523440612284014079661640',
    '72819755632666247567002874213191474609')
    order by b.internal_id

Надеюсь, это может кому-то помочь. ..

0
ответ дан 5 December 2019 в 03:26

Теги

Похожие вопросы