Imaginemos un tipo de contenido llamado "book" que tiene un campo llamado "image" que guarda sus archivos en la carpeta "". Un día X queremos cambiar esta ubicación a "book/image/". Los archivos de los contenidos que se crearán en futuro se guardarán en book/image/ (siempre dentro el correspondiente directorio del "site/...") pero los artículos ya creados, mantienen su ubicación original.
Es necesario realizar dos operaciones. La primera, mover los archivos "físicamente" y la segunda, modificar la dirección en la base de datos de Drupal. Dependiendo de la instalación de Drupal, es probable que sea necesario trabajar en más tablas de las que nombro en este artículo.
Esto es fácil. Los que están en sites/dominio/files/* van a sites/dominio/files/book/image/*
Esto es menos fácil. Tenemos que actualizar la ubicación de cada imagen. Y de los campos donde esté.. por ejemplo: body. Pero antes, hay que modificar la tabla donde se "guarda" cada imagen: file_managed
Tabla: file_managed. Campo: uri
UPDATE file_managed file,
(
SELECT
file.fid as fid2, file.uri as uri, INSERT(file.uri, 10, 0, "book/image/") as uri2
FROM
field_data_field_image AS field LEFT JOIN file_managed AS file ON file.fid = field.field_image_fid
WHERE
field.bundle = 'book' AND file.uri NOT LIKE 'public://book/image/%'
) AS file2
SET
file.uri = file2.uri2
WHERE
file.fid = file2.fid2;
Tabla: field_revision_body. Campo: body_value
UPDATE field_revision_body field,
(
SELECT
revision_id AS id2, body_value as value1, REPLACE(body_value, "public://FreePBX", "public://book/image/FreePBX") AS value2
FROM
field_revision_body as field
WHERE
field.bundle = 'book' AND body_value LIKE '%public://FreePBX%'
) AS field2
SET
field.body_value = field2.value2
WHERE
field.revision_id = field2.id2;
Y lo mismo habría que hacer para la tabla field_data_body