查找并替换整个Linux文件系统中的文件/文件夹名称和内容
问题描述:
我有一台Linux(Ubuntu)服务器,我在上面托管一个网站。我正在更改我的域名,比如从xxxxx.xx
到yyyyy.yy
。查找并替换整个Linux文件系统中的文件/文件夹名称和内容
我想是找到xxxxx.xx
以及带中的所有文件和文件夹的名称和在整个文件系统所有文件内容yyyyy.yy
更换,以反映这一变化。
我不认为这个问题已经被全部询问过,但是如果我错过了,请指出我的方向。谢谢。
答
您可以使用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 {} \;
你会如何期待我们找到模式为'xxxxx.xx'的文件? – Inian
我不确定我是否理解你的问题; 'xxxxx.xx'是我想匹配的确切字符串,而不是模式。 – Zak
名为'xxxx.xx'的文件/目录是? – Inian