重命名一堆文件,但只是标题的一部分

我需要重命名一堆文件(大约167k),并且每个文件中只有部分标题。 来自: Aaaa.bb - 2 tag tag_tag 9tag Aaaa.bb - 125 tag_tag 9tag Aaaa.bb - 3567 tag 9tag To: Aaaa.bb - 000002 tag tag_tag 9tag Aaaa.bb - 000125 tag_tag 9tag Aaaa.bb - 003567 tag 9tag一切都是在外部硬盘驱动器是否有任何工具或脚本可以帮助我在这种情况下? 也忘了提到我在ubuntu中仍然是新的和所有那些棘手的东西,所以我会要求简化答案

这是我对它的看法,使用bashawkmv

如果我们从awk立场查看文件名,filename只是一个空格分隔字段的字符串,特别感兴趣的是字段$ 3,必须用零填充。 下面的脚本就是这么做的。 确保放置脚本并将其运行在与要重命名的文件相同的目录中。 另外,确保它可以使用chmod 755 renamerScript.sh

演示

 testdir:$ ls Aaaa.bb - 125 tag tag_tag 9tag Aaaa.bb - 2 tag tag_tag 9tag Aaaa.bb - 4207 tag tag_tag 9tag BACKUP/ renamerScript.sh* testdir:$ ./renamerScript.sh mkdir: cannot create directory 'BACKUP': File exists cp: omitting directory 'BACKUP' renaming Aaaa.bb - 125 tag tag_tag 9tag to Aaaa.bb - 000125 tag tag_tag 9tag renaming Aaaa.bb - 2 tag tag_tag 9tag to Aaaa.bb - 000002 tag tag_tag 9tag renaming Aaaa.bb - 4207 tag tag_tag 9tag to Aaaa.bb - 004207 tag tag_tag 9tag testdir:$ ls Aaaa.bb - 000002 tag tag_tag 9tag Aaaa.bb - 000125 tag tag_tag 9tag Aaaa.bb - 004207 tag tag_tag 9tag BACKUP/ renamerScript.sh* 

脚本

 #!/bin/bash # renamerScript.sh # Author: Serg Kolo # Date: Oct 17, 2015 # Purpose : renaming specific files # Written for: http://askubuntu.com/q/686794/295286 # Make sure you have backup of the files !!! # comment/uncomment if you do want to do a backup mkdir BACKUP cp -t BACKUP * # This is where the magic happens: # If we look at filenames from the awk point of view # "Aaaa.bb - 2 tag tag_tag 9tag" are all really # space-separated fields. Field #3 is the one we need to edit. # What we can do is pad it with zeros and then chop off 6 # characters from the end, and store that as new filename # The rest is just doing mv command from old filename to new # And also making sure we're operating on files , not directories # and not renaming the script file,too for FILENAME in * ; do if [ -f "$FILENAME" -a "$FILENAME" != "renamerScript.sh" ]; then OLDFILENAME="$FILENAME" NEWFILENAME=$(echo "$FILENAME" | awk '{$3="00000"$3; len=(length($3)-5); $3=(substr($3,len)); print }') printf "renaming $OLDFILENAME to $NEWFILENAME \n" mv "$OLDFILENAME" "$NEWFILENAME" fi done 

我会推荐Python并使用正则表达式。 这是我制作的一个脚本示例,它可以包含文件夹和子文件夹中的所有文件。

 directoryChosen = (sys.argv[1]) print directoryChosen + " thi is inside dollartohash" if os.path.isdir(directoryChosen): for n in os.listdir(directoryChosen): if not n.startswith('.'): newname = n.replace('$', '#') print newname if newname != n: path = os.path.join(directoryChosen, n) print path + " this is path" target = os.path.join(directoryChosen, newname) print target + " this is target" os.rename(path, target) newdir = directoryChosen.replace('$', '#') print newdir if directoryChosen != newdir : os.rename(directoryChosen, newdir) 

如您所见,它将目录作为参数,并将符号更改为另一个符号。 我相信你可以修改更换部件。

您可以使用基于perl的rename命令以所需格式和字段宽度重新打印空格连字符后面的数字序列,例如

 rename -vn -- 's/ - (\d+)/sprintf " - %06d", $1/e' * 

(-n标志表示’没有操作’,即它只会执行干运行来测试表达式:如果/当您确定它正常工作时将其删除)。

尝试pyRenamer批量文件重命名器,它使用模式,替换,插入或删除文本重命名文件,甚至手动重命名文件。

它有GUI窗口,具有以下function:

  • 用于重命名文件的模式。 搜索并替换以重命名文件。 在文件名的任何位置插入和删除字符。 大写(制作大写文件名)。 常见的替代品。 手动重命名所选文件。 使用元数据重命名图像。 使用元数据重命名音乐。 资源

安装: sudo apt-get install pyrenamer