2014-03-07 152 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