2016-12-29 52 views
-3

我有一台Linux(Ubuntu)服务器,我在上面托管一个网站。我正在更改我的域名,比如从xxxxx.xxyyyyy.yy查找并替换整个Linux文件系统中的文件/文件夹名称和内容

我想是找到xxxxx.xx以及带中的所有文件和文件夹的名称和在整个文件系统所有文件内容yyyyy.yy更换,以反映这一变化。

我不认为这个问题已经被全部询问过,但是如果我错过了,请指出我的方向。谢谢。

+1

你会如何期待我们找到模式为'xxxxx.xx'的文件? – Inian

+0

我不确定我是否理解你的问题; 'xxxxx.xx'是我想匹配的确切字符串,而不是模式。 – Zak

+0

名为'xxxx.xx'的文件/目录是? – Inian

回答

2

您可以使用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 {} \; 
+0

谢谢,我会尝试一下! – Zak

+0

@Zak:让我知道它是否有效,并且不要忘记接受解决方案以将其标记为有用以供进一步参考。 – Inian

+1

再次感谢您的回答。我认为它工作正常,但我不想尝试“现场”版本,因为我不想重新命名。一旦我确定它的工作,我一定会接受你的答案。 – Zak

相关问题