2013-03-20 69 views
-1

需要編寫一個bash腳本的幫助,該腳本將重命名正在輸出的文件作爲文件名.suffix.date我需要將這些文件重寫爲name.date.suffix。將文件重命名爲原始擴展

編輯:從日期 更改後綴〜 這是我到目前爲止有:

find . -type f -name "*.~" -print0 | while read -d $'\0' f 
do 
    new=`echo "$f" | sed -e "s/~//"` 
    mv "$f" "$new" 
done 

這將更改後綴回原來的,但無法弄清楚如何獲得日期之前被命名爲擴展名(fname ??)

回答

1

您可以使用正則表達式匹配拉開原文件名:

find . -type f -name "*.~" -print0 | while read -d $'\0' f 
do 
    dir=${f%/*} 
    fname=${f##*/} 
    [[ $fname =~ (.+)\.([^.]+)\.([^.]+)\.~$ ]] || continue 
    name=${BASH_REMATCH[1]} 
    suffix=${BASH_REMATCH[2]} 
    d=${BASH_REMATCH[3]} 

    mv "$f" "$dir/$name.$d.$suffix" 
done 
+0

這是什麼意思? – chepner 2013-03-20 20:06:56

+0

這個工作很棒!!謝謝你的幫助...... :) – jmituzas 2013-03-21 13:02:04

0
  1. 先創建一個文件列表並重定向到一個文件。 ls> fileList.txt

  2. 打開文件並在Perl中逐行讀取。使用正則表達式匹配的文件的零件和捕捉他們這樣

    my ($fileName,$suffix,$date)=($WholeFileName=~/(.*)\.(.*)\.(.*)/);

    這應該抓住三個獨立的變量爲您服務。現在,您只需將舊文件移動到新文件名即可。新的文件名將是上述三個變量的串聯。 $ newFileName = $文件名。 「 」$日期。「。」 $後綴。如果你有一個樣本fileName發表評論,我可以回覆一個簡短的腳本。 Perl不是唯一的方法。你可以使用bash或awk,並找到替代方法來做到這一點。

0
  1. 削減你的文件名的每個部分:

    FIN=$(echo test.12345.ABCDEF | sed -e 's/[a-zA-Z0-9]*[\\.][a-zA-Z0-9]*[\\.]//') 
    DEBUT=$(echo test.12345.ABCDEF | sed -e 's/[\\.][a-zA-Z0-9]*[\\.][a-zA-Z0-9]*//') 
    MILIEU=$(echo test.12345.ABCDEF | sed -e 's/'${FIN}'//' -e 's/'${DEBUT}'//' -e 's/[\.]*//g') 
    
  2. 粘貼預期各部分:

    echo ${DEBUT}.${FIN}.${MILIEU} 
    
0
rename --no-act 's/\(name-regex\).\(suffix-regex\).\(date-regex\)/\1.\3.\2' * 

扭捏三個regexe s以適合您的文件名,並且當您滿意結果以實際重命名文件時,請刪除--no-act

1

猛砸,唯一的解決辦法:

while IFS=. read -r -u 9 -d '' name suffix date tilde 
do 
    mv "${name}.${suffix}.${date}.~" "${name}.${date}.${suffix}" 
done 9< <(find . -type f -name "*.~" -print0) 

注:

  • -d ''爲您提供了相同的結果,通過在閱讀他們的點-d $'\0'
  • 拆分文件名。當然,這意味着如果在其他地方有點,它會中斷。
  • 否則應該可以使用幾乎任何文件名,包括那些包含空格,換行符和其他有趣的業務。
+0

這假定'name'將不包含'.'。 – chepner 2013-03-20 16:09:09

+1

是的,它在筆記部分。 – l0b0 2013-03-20 16:13:02

+0

我收到名爲「test2.txt.20130320 95325」的文件。〜「noww而不是原來的」test2.txt.20130320。〜「?? – jmituzas 2013-03-20 19:28:33