2015-08-20 25 views
0

我試圖讓一個bash腳本來重命名一些文件極其匹配我的正則表達式,如果他們匹配我想用正則表達式重命名並覆蓋舊的現有文件。正則表達式匹配的文件和重命名+覆蓋舊文件

我想這樣做,因爲在計算機1上我有一個文件,在計算機上2我更改文件。後來我回到計算機1,它給出了一個示例衝突,因此它們都保存了它們。

示例文件:

acl_cam.MYI衝突後

示例文件:

acl_cam(實施例爭端中與....上2015年8月20日)。 MYI

我嘗試了很多認爲像重命名,mv和cou其他腳本,但它沒有工作。

正則表達式我應該在我看來,使用方法:

(.*)/s\(.*\)\.(.*) 

然後將其重命名爲值1。 value2並替換舊文件(acl_cam.MYI),並從它開始的位置對所有文件/目錄執行此操作

您能幫我解決這個問題嗎?

+0

你看過Linux'rename'命令嗎?如果它不在你的發行版中,你可以下載它。 – Barmar

回答

0

如果我正確理解你的問題,你有問題是兩部分。 (1)與錯誤字符串匹配並生成文件名的正確的正則表達式是什麼?和(2)如何使用返回的文件名移動/刪除有問題的文件?

如果在問題的刺痛是:

acl_cam (Example conflit with .... on 2015-08-20).MYI 

,你需要返回MySQL的文件名,然後一個正則表達式類似於下面的工作:

[ ][(].*[)] 

流編輯器sed是與其他任何東西一樣好,可以從字符串中返回文件名。例如:

$ printf "acl_cam (Example conflit with .... on 2015-08-20).MYI\n" | \ 
    sed -e 's/[ ][(].*[)]//' 
acl_cam.MYI 

(示出與上面的行繼續)

然後,它是由你如何移動或刪除該文件。剩下的問題是當前存儲的信息(錯誤字符串)在哪裏以及如何訪問它?如果你有一個完整的這些錯誤的文件,那麼你可以做類似如下:

while read -r line; do 

    victim=$(printf "%s\n" "$line" | sed -e 's/[ ][(].*[)]//') 

    ## to move the file to /path/to/old 
    [ -e "$victim" ] && mv "$victim" /path/to/old 

done <$myerrorfilename 

(你也可以養活字符串sed此處的字符串,但爲簡單起見省略)

如果符合您的目的,您也可以刪除該文件。然而,需要更多的信息來闡明信息的存儲方式和存儲位置,以及您希望如何處理這些信息以提供更多具體信息。如果您還有其他問題,請告訴我。

+0

謝謝你的好回覆David! sed功能正在工作,但我不能用MV來替換文件(文件在同一個文件夾中)你有沒有解決方案 – Ceesjan

+0

還沒有完成,我想說:謝謝你的好回覆David!該sed功能正在工作,但我不能用MV來替換文件(文件在同一文件夾中)你有解決方案嗎?沒有錯誤文件只是一個幾乎相同的文件命名..(示例confi ..) – Ceesjan

+0

是的,答案是'mv -f「$ victim」/ path/to/old'(強制移動)或'cp - 一個「$受害者」新名稱; rm「$ victim」'。 (兩步複製/刪除) –

0

對於這個問題的人誰是感興趣的最終解決方案:

for i in *; do 
    #Wildcar check if current file containt (Exemplaar 
    if [[ $i == *"(Exemplaar"* ]] 
    then 
     #Rename the file to the original name (without Exemplaar conflict) 
     NewFileName=$(echo "$i" | sed -E -e 's/[ ][(].*[)]//') 
     #Remove the original file 
     rm $NewFileName; 
     #Copy the conflict file as the original file name 
     cp -a "$i" $NewFileName; 
     #Delete the conflict file 
     rm "$i"; 
     echo "Removed file: $NewFileName with: $i"; 
    fi 
done 

我用這個代碼來替換由Dropbox的同步與不同的計算機上創建我的數據庫衝突文件。

相關問題