2012-04-16 57 views
0

我已經徹底研究過,以查找/創建適用於我試圖實現的腳本。從Bash中的文件名中刪除連字符

我試圖用Bash改變多個文件名。在這種類型的,我想只是刪除連字符:

YachtRescueVO041512.mpg

YachtRescueVO041512.mpg

但隨後,有更多的文件在同一目錄。我想刪除這兩個連字符和日期:

6CO1-041512.mpg

6C01.mpg

我敢肯定,我需要一個正則表達式來排序通過它,因爲還有其他文件約會慣例,如6B1A,3TSE1,CO1,11TSE3,TS1等。我意識到這將是一個冗長的腳本。如果你有空閒時間,我會很感激這個幫助。

+0

您如何確定何時刪除連字符以及何時刪除連字符和日期? – 2012-04-16 00:20:38

+0

可能的重複http://stackoverflow.com/questions/10158704/remove-hyphens-from-filename-with-bash/10158742#10158742 – 2012-04-16 00:47:14

+0

@idoperceive你是誰發佈了我剛剛鏈接的問題。我在這個問題上發佈的答案完全解決了這個問題。它會在目錄及其子目錄中找到帶連字符的所有文件,並將其全部重命名爲不帶連字符。 – 2012-04-16 00:50:36

回答

1

好了,我沒有時間做這樣的腳本,但我想你應該看看下面的命令:

  • sed的
  • 重命名
  • 削減
  • AWK

是的,正則表達式是一種非常有效的方法,但要花很長時間才能真正有效地使用語法......

1

Bash parameter expansion

假設文件名是在var

new_var = ${var%-*}${var#*-}

這將罰款你的第一個例子。對於第二個例子:

new_var = ${var%-*}.${var#*.}

我認不出你想從你的問題做替代品。

1

我已經張貼了這個在你問here的問題,但如果你認爲這是一個單獨的問題,這將重命名目錄中的所有文件和子目錄:

for file in $(find dirWithDashedFiles -type f -iname '*-*'); do 
    mv $file ${file//-/} 
done 

所有的告誡我在其他職位申報。

您可以修改字符串操作以滿足您的需求。例如,您刪除所有的連字符後,就可以運行這個在名稱擺脫對文件的日期與6C01

for file in $(find dirWith6C01Files -type f -iname '6C01*'); do 
    mv $file ${file%[0-9][0-9][0-9][0-9][0-9][0-9].mpg}.mpg 
done 

This site在慶典上的字符串操作一些信息,應該讓你開始在你需要的正則表達式上。

注意:我不記得/找到任何東西來指定匹配的字符的確切數量,在egrep中有一個la [0-9]{6}。如果有人發現它讓我知道。

+0

我感謝您的耐心和幫助。我終於可以將它們拼湊成適合我情況的東西。謝謝! – idoperceive 2012-04-16 03:34:24

+0

太棒了。你能爲你的開放性問題選擇一個被接受的答案嗎? – 2012-04-16 11:27:26