2012-12-06 17 views
0

得到下面的代碼從一個文件名移動文件名的第一部分結束時,將文件的擴展名之前

rename -v "s/^1234-//g" *.*** 

輸入的開始刪除1234-:

1234- test1.test2.jpg

輸出:

test1.test2.jpg

而且這段代碼裏面添加-1234到文件名末尾

for file in *.jpg; do echo $(basename $file .jpg)-1234; done 

輸入:

test1.test2.jpg

輸出:

test1.test2-1234.jpg

我正在尋找一種方法將這兩個命令組合到一個腳本中,但也可以避免第二位代碼在每次運行時加入-1234,如果可能的話。

回答

0

這將爲它:

for file in *.jpg; do 
    basename=${file%.*}    # Get the basename without using a subprocess. 
    extension=${file##*.}    # Get the extension if you want to add *.JPG in the for, can be skipped if only *.jpg. 

    newname=${basename#1234-}   # Remove "1234-" in front of basename. 
    test "$basename" = "$newname" && # If basename did not start with "1234-", skip this file. 
    continue 

    newname=${newname%-1234}   # Remove an eventual "-1234" at the end of newname. 
    newname="${newname}-1234"   # Add "-1234" at the end of newname. 
    newname="$newname.$extension"  # Restore extension. 
    echo mv "$file" "$newname"  # echo rename command. 
done 

如果你很高興與輸出,去除回聲中的最後一行。

+0

完美的作品!並感謝分配額外的解釋,非常感謝。 – zyl1647

0

這是假設所有的文件都是.jpg

rename -v "s/^1234-(.+)(\.jpg)/$1-1234$2/" *.* 

這符合整個文件名,但捕捉剛過1234- 2組的一部分。 $1$2區域反向引用捕獲的部分。