2014-10-02 96 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