2010-11-04 27 views
1

我想運行一個bash腳本,它遞歸地清理目錄中的每個文件名。例如,我有文件名:清除目錄中的文件名

The.Sarah.Jane.Adventures.S04E07.The.Empty.Planet.Part1.WS.PDTV.XviD-BIA [sharethefiles.com] .AVI The.Sarah.Jane .Adventures.S04E08.The.Empty.Planet.Part2.WS.PDTV.XviD-BIA [sharethefiles.com] .AVI

我想將文件轉換爲:

薩拉·珍妮冒險S04E07的Empty Planet Part1.avi

The Sarah Jane Adventures S04E07 The Empty Planet Part2.avi

所以我有這個sed腳本:

sed -e's/\[sharethefiles\.com\]//g; s/WS//g; s/PDTV//g; s/Xvid-BiA//g; s/XviD-BiA//g; s/\.\.//g; s/\./\ /g;' 

但它帶來了問題。這個。 (句點)在後綴(avi)之前被刪除,我真的不知道如何用動態文件替換它。有時在後綴之前可能只有一個空格,有時沒有空格,因爲該腳本也會刪除雙重句點。

解決問題的任何想法?

感謝您的幫助!

回答

2

您可能希望將所有句點轉換爲空格,然後將其轉換爲設置擴展名的命令。

例(忽略您指定的其他特殊情況):

tr '.' ' ' | sed 's/ \([^ ]*\)$/.\1/' 
+0

謝謝,這似乎爲我想要的目的,工作不夠精細。在特殊情況下,我最終在案件發生前將空間移除,並且工作得很好。輕鬆修復,等等......再次感謝! – Ratty 2010-11-04 20:36:08

+0

@Ratty:你可以用's /\.\+//g'替換倒數第二個模式,並用Gingi的模式替換上一個模式,從而消除'tr'。 – 2010-11-04 21:56:00

相關問題