所以基本上,我想寫一個腳本,它能夠從文件名中刪除字符,直到它遇到一個字母。防爆。如果我是一個包含文件夾中的文件運行它:腳本從一個文件夾中的所有文件的文件名中刪除字符
13. abc
0 2 d ef
1.ghi3
這將文件重命名爲
abc
d ef
ghi3
感謝
所以基本上,我想寫一個腳本,它能夠從文件名中刪除字符,直到它遇到一個字母。防爆。如果我是一個包含文件夾中的文件運行它:腳本從一個文件夾中的所有文件的文件名中刪除字符
13. abc
0 2 d ef
1.ghi3
這將文件重命名爲
abc
d ef
ghi3
感謝
嘗試以下操作:
for f in *; do
echo mv "$f" "$(sed 's/^[^[:alpha:]]*//' <<<"$f")"
done
出於安全,mv
命令的前綴爲echo
;刪除echo
以實現實際重命名。
以上是符合POSIX標準的的實現。
注意rename
不是一個POSIX實用,所以您可以:
一種概述的流行平臺相對於rename
:
rename
效用:
s///
根據正則表達式執行替換。
-n
util-linux
包自帶:
rename
實用可言。
brew install rename
),其特點是超集什麼的基於Debian的平臺,提供基於Perl的實現。您可以使用rename命令。
rename 's/^[^a-z]+//' *
如果您的平臺恰好有基於_Perl_的'rename'實用程序,這是一個很好的解決方案,例如,在基於Debian的平臺上,比如Ubuntu。這個答案在Fedora(不同的'rename'工具)和OSX(根本沒有預安裝的'rename''工具)上不起作用。 – mklement0
我認爲那些領先的空間是重要的,而不是一個錯字?此外,空格不被視爲「字母」,所以請詳細說明您所指的字符。最後,向我們展示你到目前爲止所嘗試過的。我們不在這裏爲你做你的工作,而是爲了幫助你解決特定的問題! – miken32
@ miken32:空格是源自_edits_的原始文章(使用反引號而不是縮進,但沒有前導空格),所以我刪除了它們。假設「字母」的意思是'[[:alpha:]]',用POSIX字符類來表示。 – mklement0