如何更改目录中所有文件中出现的所有单词

问题描述 投票:25回答:4

我正在创建一个User类,其中一个方法是get_privileges();

经过几个小时的猛烈撞击键盘,我终于发现,我继承了这个特定数据库的前一个编码器在MySQL数据库中将“特权”这个词拼写为“privelages”,因此在数百个访问这些数据库的文件中也是如此。 “privelages”它是拼写的那种方式。

在Linux(Ubuntu Server)中是否有办法可以浏览/var/www文件夹中的每个位置并用“特权”替换“privelages”,这样我就不必处理这个错字和代码了?

linux ubuntu replace
4个回答
47
投票

考虑子目录(未经测试)的变体:

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

这将find所有文件(不是由-type f指定的目录)在/var/www下执行,并执行sed命令将“privelages”替换为它找到的每个文件的“特权”。


5
投票

看看这个:http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

cd /var/www
sed -i 's/privelages/privileges/g' *

1
投票

我通常使用这个简短的脚本,它将重命名所有文件中的字符串以及所有目录名和文件名。要使用它,您可以将下面的文本复制到名为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

0
投票

对于Mac OS:

find . -type f -name '*.sql' -exec sed -i '' s/privelages/privileges/ {} +

如果Matwilso的脚本设计适用于Mac OS,那么上面的脚本将会是这样的

#!/bin/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 -name '*.sql' -exec sed -i '' s/${1}/${2}/ {} + # inside sql scripts
© www.soinside.com 2019 - 2024. All rights reserved.