3

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

find /somedir -type f -print0 -exec sed -i'' -e 's#http\\:\\/\\/domain.com#https\\:\\/\\/www.domain.com#g' {} +

Полученный файл имеет схему http: удален, оставляя // - т.е. "//www.domain.com"

Кроме того, создается НОВЫЙ файл, добавляющий -e к имени файла. - т.е. some file.php-e который явно нежелателен.

Хотя этого вполне достаточно (после удаления файлов *-e OCD во мне действительно хочет знать, как это сделать правильно). Примечание: я работаю локально на Mac, но также буду выполнять это на Linux.

Любые идеи с благодарностью!

1 ответ1

2

Решение 1. Один из способов - использовать find с xargs:

find /dir -type f -print0 | xargs -0 sed -i 's#http://domain.com#https://www.domain.com#g'

Решение 2: Другой вариант - использовать find с -exec , очень похожим на ваш вопрос:

find /dir -type f -exec sed -i 's#http://domain.com#https://www.domain.com#g' {} +

Оба решения будут вызывать sed с несколькими файлами в качестве аргументов. Поэтому sed вызывается не один раз для каждого файла, а для каждого набора файлов.

Решение 3. Вместо sed вы также можете использовать perl для поиска-замены-задания:

perl -i -pe 's#http://domain.com#https://www.domain.com#g' file

В сочетании с командой find/xargs :

find /dir -type f -print0 | xargs -0 perl -i -pe 's#http://domain.com#https://www.domain.com#g'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .