Подтвердить что ты не робот

Как изменить все вхождения слова во все файлы в каталоге

Я был в процессе создания класса User, где один из методов был get_privileges();.

Спустя несколько часов после того, как я нажал на клавиатуру, я наконец обнаружил, что предыдущий кодер, который я унаследовал эту конкретную базу данных, записал слово " привилегии" как " privelages в базе данных MySQL и, следовательно, также везде в сотнях файлов, которые обращаются к этим" частным владельцам", это написано таким образом.

Есть ли способ в Linux (Ubuntu Server), который я могу пройти через каждое место в папке /var/www и заменить " privelages" на " привилегии", так что мне не нужно иметь дело с этой опечаткой и кодом вокруг нее?

4b9b3361

Ответ 1

Вариант, учитывающий подкаталоги (непроверенные):

find /var/www -type f -exec sed -i 's/privelages/privileges/g' {} \;

Это будет find все файлы (не каталоги, указанные -type f) в /var/www), и выполните команду sed, чтобы заменить "privelages" "привилегиями" на каждый найденный файл.

Ответ 3

Я обычно использую этот короткий скрипт, который переименует строку во всех файлах и во всех именах каталогов и имен файлов. Чтобы использовать его, вы можете скопировать приведенный ниже текст в файл с именем replace_string, запустить sudo chmod u+x replace_string и затем переместить его в папку sudo mv replace_string/usr/local/bin чтобы иметь возможность выполнить его в любом каталоге.

ПРИМЕЧАНИЕ: это работает только в Linux (протестировано в Ubuntu) и не работает в MacOS. Также будьте осторожны с этим, потому что он может испортить такие вещи, как файлы git. Я не проверял это на двоичных файлах также.

#!/usr/bin/env bash

# This will replace all instances of a string in folder names, filenames,
# and within files.  Sometimes you have to run it twice, if directory names change.


# Example usage:
# replace_string apple banana

echo $1
echo $2

find ./ -type f -exec sed -i -e "s/$1/$2/g" {} \;  # rename within files
find ./ -type d -exec rename "s/$1/$2/g" {} \;    # rename directories
find ./ -type f -exec rename "s/$1/$2/g" {} \;  # rename files