批量重命名200000个文件

时间:2014-02-16 02:21:18

标签: linux bash awk

我希望重命名206,372个文件,当前名称为Minecraft (03)_206372.tga,这就是文件的标注方式。

我知道自己在做什么,但我想确定自己在做什么。 到目前为止我有一个命令

ls Minecraft\ \(03)\)_206372.tga | awk -F'_' '{print $2}'

该命令将打印206372.tga。 这样做我想要的,但我想同时用命令更改一个超过200,000个文件的名称,有人可以帮助完成命令。

3 个答案:

答案 0 :(得分:1)

尝试类似:

for file in Minecraft*.tga ; do 
    mv "$file" "${file##*_}"
done

答案 1 :(得分:0)

只需使用rename命令,该命令使用perl regex rename 's/Minecraft \(03\)_//' *.tga
这将在所有以“.tga”结尾的文件中用空字符串替换“Minecraft(03)_”。

答案 2 :(得分:0)

这是一种蛮力,但从文件中删除前缀是可以理解的方法:

#!/bin/sh
dir=$0
for file in `find $dir -name blah_\*.tga`; do
    newfile=`echo $file | sed 's/blah_//'`
    my $file $newfile
done

根据您的文件系统,您可能会在目录中包含如此多的文件并进行如此多的更改,从而对性能产生重大影响。

关于使用“find”的注意事项:

  • 如果您需要使用find而不需要完全递归,那么您可能还需要在查找中添加“-maxdepth 1”选项,
  • 另外,使用glob查找可能无法正常工作,因为所有文件名的总长度会使命令行太长。