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

标签 linux bash ubuntu replace filesystems

我有一个 Linux (Ubuntu) 服务器,我在上面托管一个网站。我正在更改我的域名,例如 xxxxx.xxyyyyy.yy .

我想要的是一个查找 xxxxx.xx并将其替换为 yyyyy.yy 在整个文件系统的所有文件和文件夹名称以及所有文件内容中以反射(reflect)此更改。

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

最佳答案

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

*xxxx.xx* 是一个 glob 模式,用于匹配名称中任意位置包含此内容的文件/文件夹。

强烈建议不要立即运行重命名,而是使用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 {} \;

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

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 {} \;

关于linux - 在整个 Linux 文件系统中查找并替换文件/文件夹名称和内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41387042/

相关文章:

c - C 中的多线程,斐波那契数列

c++ - gethostname() 给出退出状态 -1 我该如何处理?

bash - 如何在 Linux Bash Shell 命令行中删除右侧的整个单词

swift - 在 Ubuntu 上执行 swift

c++ - 如何在 C++ 中找到基础文件类型?

regex - 通过 bash/sed/awk 快速递归搜索和替换大量文件 - 这可能吗?

linux - 为/etc/passwd 文件输出的每一行打印出名称

bash - 将变量从 shell 脚本传递到 GNU screen

ruby - 由于 gpg 错误,无法在 Ubuntu 16.04 上安装 Ruby rvm

linux - 在lampp stack ubuntu上运行github克隆项目时出现服务器500错误