查找并替换整个Linux文件系统中的文件/文件夹名称和内容

时间:2016-12-29 20:55:08

标签: linux bash ubuntu replace filesystems

我有一个Linux(Ubuntu)服务器,我在其上托管一个网站。我正在更改我的域名,让我们说从xxxxx.xxyyyyy.yy

我想要的是查找xxxxx.xx并将其替换为yyyyy.yy 在所有文件和文件夹名称以及整个文件系统的所有文件内容中以反映这种变化。

我不相信这个问题已被完整提出,但如果我错过了,请指出我正确的方向。感谢。

1 个答案:

答案 0 :(得分:3)

您可以使用GNU find和一些bash字符串操作进行实际文件重命名。

*xxxx.xx*是一个glob模式,用于匹配名称中任何位置的文件/文件夹。

严格建议 NOT 立即运行重新命名,但请使用echo运行一次以查看文件是否正确列出。我提供了两个不同的命令,一个用于重命名文件,另一个用于文件夹,因为重命名文件夹需要几个额外的选项以避免递归文件重命名。

重新命名文件夹: -

find . -depth -type d -name "*xxxx.xx*" -execdir sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; mv -v "$x" "$y"' sh {} \;

对于文件: -

find . -type f -name "*xxxx.xx*" -exec sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; mv -v "$x" "$y"' sh {} \;

NOT 立即运行命令,只需运行以下命令,查看原始文件/文件夹和重命名的文件/文件夹是否具有您想要的正确名称。

find . -type f -name "*xxxx.xx*" -exec sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; echo "$x" "$y"' sh {} \;

(和)

find . -depth -type d -name "*xxxx.xx*" -execdir sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; echo "$x" "$y"' sh {} \;

由于您还要更改文件内容,请添加一个额外的sed就地文件重新命名为

find . -type f -name "*xxxx.xx*" -exec sh -c 'x=$1; y="${x/xxxx.xx/yyyy.yy}"; mv -v "$x" "$y"; sed -i 's/xxxx.xx/yyyy.yy/g' "$y" ' sh {} \;