2014-03-07 195 views
0

我需要一些命令行fu。ubuntu中批量重命名文件

我有一大堆文件,从4个数字开始,然后是破折号,然后各种字母,然后扩展,例如。

0851_blahblah_p.dbf 
0754_asdf_l.dbf 

我想要的是将四个数字移动到文件名的末尾(保留扩展名)并删除下划线。因此,上述示例将被重命名为:

blahblah_p0851.dbf 
asdf_l0754.dbf 

所有帮助表示赞赏。

我正在运行ubuntu。

感谢DJ

+0

答案就在这里: http://stackoverflow.com/questions/2759067/rename-files-in-python –

回答

3

这里是纯bash一个解决方案:神经崩溃了意见

for file in *.dbf; do 
    ext=${file##*.};num=${file%%_*};name=${file%.*};name=${name#*_} 
    mv $file $name$num"."$ext; 
done 

for file in *.dbf 
do 
    ext=${file##*.}    # Capture the extension 
    num=${file%%_*}    # Capture the number 
    name=${file%.*}    # Step 1: Capture the name 
    name=${name#*_}    # Step 2: Capture the name 
    mv "$file" "$name$num.$ext" # move the files to new name 
done 
+1

感谢所有的答复。像魅力一样工作。 – paddleman

2

可以使用rename命令:

rename 's/([0-9]{4})_([[:alpha:]]*)_.*.dbf/$2_$1.dbf/' * 
1

您可以使用也

$sed -r 's/([^_]+)_([^.]+)/\2\1/g' 

使用这种方式,给定的名称是分裂和修改按您的要求的sed。

(或)

使用这个脚本,并通过文件名作为参数,它会移动的文件名按要求。

#!/bin/sh 
if [ $# -ne 1 ] ; then 
    echo "Usage : <sh filename> <arguments>" 
    exit ; 
fi 
for file in $* 
do 
    mv $file `echo $file | sed -r 's/([^_]+)_([^.]+)/\2\1/g' ` 
done