mercoledì 26 marzo 2008

Rimuovere file esterni al database: creare comandi shell da una query

Capita a volte di aver memorizzato dei record nel database contenenti percorsi di file sul filesystem (ad esempio immagini) e di voler cancellare i record e i relativi file. Ci sono varie soluzioni a questo problema, una delle quali consiste nell'effettuare una query SQL che produca una serie di comandi shell per la rimozione di ogni singolo file, dopodiché si procede all'esecuzione di tali comandi e alla rimozione dei record.
In sostanza:
  • occorre redirigere l'output della query non formattato su file, quindi da occorre dare i comandi \a \t \o comandi.sh
  • si effettua la query concatenando i comandi da eseguire. Ad esempio:
select 'rm path/*/' || '/' || id_elemento || '.png'

from elementi where upload_name like'path/%';


Come si può notare questa query produce una serie di tuple in uscita che effettuano un semplice rm del file con nome id_elemento.png nel percorso path.
  • eseguire il file comandi.sh da shell
  • cancellare le tuple selezionate nel database

Nessun commento: