2016-12-29 120 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

相關問題