我有一臺Linux(Ubuntu)服務器,我在上面託管一個網站。我正在更改我的域名,比如從xxxxx.xx
到yyyyy.yy
。查找並替換整個Linux文件系統中的文件/文件夾名稱和內容
我想是找到xxxxx.xx
以及帶中的所有文件和文件夾的名稱和在整個文件系統所有文件內容yyyyy.yy
更換,以反映這一變化。
我不認爲這個問題已經被全部詢問過,但是如果我錯過了,請指出我的方向。謝謝。
我有一臺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