2014-10-02 48 views
0

通過sed教程,但無法弄清楚如何使用。sed正則表達式替換文件名的一部分

有像「ABCxxx.ext」需要重命名爲跨子文件夾中的文件100S「XYZxxx.ext」

其中xxx是不同的充字母數字小串和.EXT是任何extention(XML,JAVA, XLS)

我能使用:

find . -iname "ABC*.*" 

在終端,查看這些文件,但不知道用什麼樣的sed或其他命令重命名文件。在Mac 10.9.4

例子: 「Abc01k.xls」 ==> 「Xyz01k.xls」 「Abcloans.xml」 ==> 「Xyzloans.xml」 「AbcThreads.java」 ==>「XyzThreads .java「

因此,如果文件的名稱中包含Abc字符,請將其替換爲Xyz。可以是第一個字符或裏面。

閱讀:https://www.gnu.org/software/sed/manual/sed.html https://apple.stackexchange.com/questions/131164/how-to-tag-files-with-finder-tags-using-parts-of-a-file-name

https://apple.stackexchange.com/questions/75114/any-easy-way-to-search-for-replace-characters-in-jpg-file-names-in-a-folder

最後1個作品1個文件夾,但我想它訪問所有文件夾。

bash腳本:

for i in Abc*; do 
     mv "$i" "${i/Abc/Xyz}" 
done 

我怎樣才能把這個腳本的所有子文件夾?或者如何做到與sed相同?

回答

2

你可以試試這個:

var1=`find . -type f -iname '*ABC*'` 
for i in $var1; do mv "$i" "`echo $i | sed 's/ABC/ZXC/g'`"; done 

這將重命名內部子目錄中的文件,並更改「ABC」到「ZXC」,甚至在文件名的中間。

+0

我把在腳本和bash或sh的電話嗎?或直接粘貼到終端? – tgkprog 2014-10-02 14:23:34

+0

你可以在腳本中使用pyt或在終端中調用它。這是兩條線。你可以通過添加「;」第一個命令後 – 2014-10-02 14:25:27

+0

如果ABC案件更改不起作用。無論如何告訴sed是不區分大小寫的?嘗試... sed's/Tfw/Ddt/gI''「;出現錯誤,您的腳本在一個文件中,2行 – tgkprog 2014-10-02 15:44:40

1

您可以使用此命令find

find . -iname "ABC*.*" -exec bash -c 'f="$1"; mv "$f" "${f/Abc/Xyz}"' - {} \; 
+0

+1 This work too thanks,but not case insensitive。like sed way as want to learn that command。 – tgkprog 2014-10-02 15:46:29

+1

For ignore case匹配'shopt -s nocasematch'和'shopt -s nocaseglob',然後在'find'找到它以使其忽略大小寫。 – anubhava 2014-10-02 15:53:18