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

时间:2012-01-18 05:37:28

标签: linux ubuntu replace

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

我把头撞到键盘上几个小时后,终于发现我继承了这个特定数据库的前一个编码器将“特权”拼写为“ privelages ”在MySQL数据库中,因此在访问这些“ privelages ”的数百个文件中的任何地方,它都是拼写的。

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

4 个答案:

答案 0 :(得分:47)

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

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

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

答案 1 :(得分:5)

检查出来:http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

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

答案 2 :(得分: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

答案 3 :(得分: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