LINUX.ORG.RU

заменить все файлы на один

 


0

2

Как заменить все *.jpg картинки в текущей директории на мой 1.jpg файл (1х1 пиксель) так, чтобы имена исходных файлов сохранились?

Дело в том, что на сайте есть устаревший раздел с тысячами картинок, которые занимают тучу гигабайт. Хочется сократить этот вес до минимума. Причем картинки пользователям врядли уже понадобятся. Нужно только сохранить файлы на своих местах для поисковиков.

Хардлинки на 1.jpg не подойдут (рекурсивно заменить файлы) потому, что после процедуры с заменой файлов сайт будет заархивирован и перенесен на другой хостинг.



Последнее исправление: h0lder (всего исправлений: 1)

В таком случае зачем заменять на один файл, если есть символьные ссылки? Делайте смивольные ссылки со всех файлов на один ваш, что бы ещё меньше места занимало.

А так, это делается посредством find.

kostik87 ★★★★★
()
Ответ на: комментарий от h0lder

Находясь в директории в которой нужно заменить файлы.

find ./ -type f -iname "*.jpg" -exec ln -fs "/путь_до_файла/1.jpg" "{}" \;
файл 1.jpg не должен находиться в той же директории в которой производится замена, иначе добавляйте проверку, что имя файла не равно 1.jpg и только в этом случае делайте символьную ссылку.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

а ещё символьная ссылка может быть относительной, главное исполнять ln -s в той директории, в которой будет ссылка.

Deleted
()
Ответ на: комментарий от Deleted

Может, но ТС не написал плоская у него структура директорий или нет.

Т.е. если у него, к примеру, вот такая картина:

dir/
  1.jpg
  1/
    file1.jpg
    file2.jpg
  2/
    file1.jpg
    file2.jpg
  3/
    file1.jpg
    file2.jpg
  ...
то для всех файлов можно указать ../1.jpg, а если у него есть поддиректории в поддиректориях первого уровня, то нужно уже использовать полный путь. Либо усложнять скрипт, добавив подсчёт уровня вложенности файла и генерации соответствующего относительного пути до файла 1.jpg. Ферштейн?

kostik87 ★★★★★
()
Последнее исправление: kostik87 (всего исправлений: 2)
Ответ на: комментарий от Deleted

главное исполнять ln -s в той директории, в которой будет ссылка.

Отнюдь. Главное это правильные параметры команды, а текущая директория ни на что не влияет.

anonymous
()
Ответ на: комментарий от anonymous

Или всегда писать путь к source относительно директории destination, да, но так ИМХО сложнее находясь на текущий момент в другом месте.

Deleted
()
Ответ на: комментарий от Deleted

Подумай над своими словами чуть более чем 5 секунд.

sleep 5

Если destination directory меняется, то находишься ты в ней или не находишься, тебе все-равно надо менять относительный source path.

Так что «сложнее находясь на текущий момент в другом месте.» бред.

anonymous
()

символьные ссылки должны быть относительные, если планируется архивация и перенос в другое место

zarkone ★★
()
Ответ на: комментарий от h0lder

Удалением чего? Файлы будут заменены символьными ссылками. Там есть ключ '-f'.

kostik87 ★★★★★
()

Хардлинки на 1.jpg не подойдут (рекурсивно заменить файлы) потому, что после процедуры с заменой файлов сайт будет заархивирован и перенесен на другой хостинг.

tar понимает hard links и не размножит их как отдельные файлы.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.