Переместить все изображения из папки в подпапку и обновить все ссылки в текстовых файлах, чтобы эти изображения переместились на новое место? - PullRequest
0 голосов
/ 04 марта 2011

У меня есть папка, которая содержит ~ 50 текстовых файлов (PHP) и сотни изображений. Я хотел бы переместить все изображения в подпапку и обновить файлы PHP, чтобы любая ссылка на эти изображения указывала на новую подпапку.

Я знаю, что могу довольно легко перемещать все изображения (mv * .jpg / image, mv * .gif / image и т. Д.), Но не знаю, как обновить все текстовые файлы - я Предположим, что Regex должен быть создан, чтобы соответствовать всем изображениям в файле, а затем каким-то образом новый каталог должен быть добавлен к имени файла изображения? Это лучше всего сделать с помощью сценария оболочки? Любая помощь приветствуется (Сервер Linux / CentOs5)

Спасибо!

Ответы [ 3 ]

1 голос
/ 04 марта 2011

sed с переключателем -i, вероятно, то, что вы ищете. -i говорит sed редактировать файл на месте.

Примерно так должно работать:

find /my/php/location -name '*.php' | xargs sed -ie 's,/old/location/,/new/location/,g'
0 голосов
/ 04 марта 2011

Это переместит все изображения в подкаталог, называемый 'images', а затем изменит только ссылки на файлы изображений, добавив 'images /' непосредственно перед базовым именем.

mkdir images
mv -f *.{jpg,gif,png,jpeg} images/
sed -i 's%[^/"'\'']\+\.\(gif\|jpg\|jpeg\|png\)%images/\0%g' *.php

Если у вас есть тысячи файлов,вам может понадобиться использовать find и xargs.Итак, немного медленнее

find ./ -regex '.*\(gif\|jpg\|png\|jpeg\)' -exec mv {} /tmp \;
find ./ -name \*.php -print0 | \
xargs -0 sed -i 's%[^/"'\'']\+\.\(gif\|jpg\|jpeg\|png\)%images/\0%g' *.php

Внимание, это также изменит путь к изображениям с удаленными URL-адресами.Также убедитесь, что у вас есть полная резервная копия каталога, синтаксис php и имена переменных могут вызвать проблемы.

0 голосов
/ 04 марта 2011

Вы можете сделать это следующим образом:

#!/bin/sh
for f in *.jpg *.png *.gif; do 
    mv $f gfx/
    for p in *.txt; do 
        sed -i bak s,`echo $f`,gfx/`echo $f`,g $p 
    done 
done

Он находит все файлы jpg / png / gif и перемещает их в подпапку "gfx", затем для каждого текстового файла (или любого типа файла, который выхотите отредактировать в) он использует "sed" на месте, чтобы изменить путь.

Btw.он создаст резервные копии отредактированных файлов с дополнительным расширением «bak».Этого можно избежать, пропустив в скрипте часть «bak».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...