使用正規表示式重命名多個資料夾

使用正規表示式重命名多個資料夾

正如標題所說,我正在尋找一個命令/工具 - 最好是從終端運行的東西(我在遠端伺服器上使用 Ubuntu),它可以一次替換多個目錄的特定部分。資料夾結構是這樣的:

Example.of.Structure[app]

Another.Example[app]

Third.Example.of.Structure[app]

我想重命名所有資料夾,因此 [app] 部分將從資料夾名稱中刪除。

我嘗試過使用基本的正規表示式。匹配方括號及其內部的文字。

當我使用它時,這似乎運作得很好“找到它”- 但我真的不確定如何將其放入命令中。

我想出的用於查找括號內的文字(包括括號本身)的正規表示式是:\[\w+\]

但我如何將其放入命令中?

謝謝。

答案1

您實際上並不需要正規表示式。一個簡單的 shell glob 加上參數擴充就可以做到這一點:

$ for f in *\[*\]/; do echo mv "${f}" "${f/\[*\]}"; done
mv Another.Example[app]/ Another.Example/
mv Example.of.Structure[app]/ Example.of.Structure/
mv Third.Example.of.Structure[app]/ Third.Example.of.Structure/

echo一旦您確信建議的替代品是正確的,請刪除)。

如果您想使用基於 regex 的工具,那麼基於 perl 的工具rename/prename是顯而易見的選擇:

$ rename -n 's/\[\w+\]//' */
rename(Another.Example[app]/, Another.Example/)
rename(Example.of.Structure[app]/, Example.of.Structure/)
rename(Third.Example.of.Structure[app]/, Third.Example.of.Structure/)

-n一旦您確信建議的替代品是正確的,請刪除)。

這兩個都符合第一的模式的出現。如果該模式有可能[app]出現在其他地方,請考慮將匹配錨定到模式的末端。看字串開始和字串結束錨點

相關內容