2015-11-05 37 views
1

所以基本上,我想寫一個腳本,它能夠從文件名中刪除字符,直到它遇到一個字母。防爆。如果我是一個包含文件夾中的文件運行它:腳本從一個文件夾中的所有文件的文件名中刪除字符

13. abc 
0 2 d ef 
1.ghi3 

這將文件重命名爲

abc 
d ef 
ghi3 

感謝

+1

我認爲那些領先的空間是重要的,而不是一個錯字?此外,空格不被視爲「字母」,所以請詳細說明您所指的字符。最後,向我們展示你到目前爲止所嘗試過的。我們不在這裏爲你做你的工作,而是爲了幫助你解決特定的問題! – miken32

+0

@ miken32:空格是源自_edits_的原始文章(使用反引號而不是縮進,但沒有前導空格),所以我刪除了它們。假設「字母」的意思是'[[:alpha:]]',用POSIX字符類來表示。 – mklement0

回答

2

嘗試以下操作:

for f in *; do 
    echo mv "$f" "$(sed 's/^[^[:alpha:]]*//' <<<"$f")" 
done 

出於安全,mv命令的前綴爲echo;刪除echo以實現實際重命名。

以上是符合POSIX標準的的實現。

注意rename不是一個POSIX實用,所以您可以:

  • 既不依賴於它的存在,
  • ,也不依賴於它的工作同樣跨平臺。

一種概述的流行平臺相對於rename

  • 基於Debian的平臺Ubuntu的具有的Perl的基於rename效用:
    • 它exp使用Perl語句,最值得注意的是s///根據正則表達式執行替換。
    • -n
  • 的Fedora幹運行支持具有完全不同的效用util-linux包自帶
    • 支持更換字面子只。
    • 沒有幹運行支持。
  • OS XNO rename實用可言。
    • 通過Homebrew你可以安裝一個基於Perl的一個(brew install rename),其特點是超集什麼的基於Debian的平臺,提供基於Perl的實現。
1

您可以使用rename命令。

rename 's/^[^a-z]+//' * 
+0

如果您的平臺恰好有基於_Perl_的'rename'實用程序,這是一個很好的解決方案,例如,在基於Debian的平臺上,比如Ubuntu。這個答案在Fedora(不同的'rename'工具)和OSX(根本沒有預安裝的'rename''工具)上不起作用。 – mklement0

相關問題