Как рекурсивное регулярное выражение переименовать двойные тире

Я использую галерею Wordpress Eazyest для создания 2000 галерей. Некоторые файлы имеют двойные или тройные тире в именах файлов. Например: abc --- def.jpg Эти файлы загружаются через FTP.

В админке WordPress и внешнем HTML, которые они заменяют, этот файл получает имя abc-def.jpg, поэтому они становятся неработающими ссылками / ссылками.

Есть ли способ, которым я могу заменить все --- или - в папке с одним символом, используя SSH? Я на Ubuntu 12.04.

0
задан 3 January 2014 в 01:50

3 ответа

Чтобы сопоставить / изменить этот шаблон в пределах одного каталога, это должно быть так же просто, как

rename -- 's/-+/-/' *.jpg

(заменить одну или несколько последовательных черточек одной чертой), но сначала выполнить пробный прогон, добавив флаги -n и -v

rename -nv -- 's/-+/-/' *.jpg

Если в одном имени есть несколько экземпляров нескольких тире (например, abc --- def - ghi.jpg), вам нужно добавить g (global) switch

rename -- 's/-+/-/g' *.jpg

Если вам нужно рекурсивно изменить имена в подкаталогах галереи, вы можете использовать команду переименования в качестве действия exec для команды find, например,

find /path/to/dir -name '*.jpg' -exec rename -nv -- 's/-+/-/g' {} +

или, если ваша удаленная оболочка поддерживает опцию оболочки globstar, вы можете попробовать заставить команду переименования действовать рекурсивно самостоятельно, используя глобус, подобный **/*.jpg

0
ответ дан 3 January 2014 в 01:50
  1. ssh в Ubuntu box, на котором вы установили Wordpress,
  2. cd в основной каталог, содержащий все галереи;
  3. запустить find -iname '*--*' -exec sh -c 'mv "{}" "$(echo {} | tr -s '-')"' \;.
0
ответ дан 3 January 2014 в 01:50

Предполагая только один набор --- или -- в каждом файле:

#!/bin/bash -e

## Substitute /path/to/folder for the root folder
if cd /path/to/folder
then
    find . -name '*---*.jpg' -exec bash -c 'file={}; mv -v "${file}" "${file/---/-}"' ';'
    find . -name '*--*.jpg' -exec bash -c 'file={}; mv -v "${file}" "${file/--/-}"' ';'
fi

ssh в машину, затем запустите приведенный выше код, заменив /path/to/folder для корневой папки всеми файлы.

0
ответ дан 3 January 2014 в 01:50

Другие вопросы по тегам:

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