2012-12-01 79 views
0

我剛剛從Windows 8來,現在有一個大問題。我現在在Ubuntu 12.10上我使用FileHistory將我的數據備份到外部硬盤,現在除了在文件名中追加時間戳以外,我的所有文件都已備份。替換括號之間的所有字符

我需要刪除以「(2012_」開始並以「)」結尾的括號之間的所有內容。

任何人都可以幫助我嗎?這裏的文件我試圖修復列表截圖:

https://dl.dropbox.com/u/2526790/Screenshot%20from%202012-11-30%2021%3A19%3A06.png

任何幫助將不勝感激。

感謝,

+1

[你有什麼嘗試?](http://whathaveyoutried.com) –

回答

0

這個怎麼樣?

rename 's/\s\([^\)]+\)//' *.* 

我們可以爲Larry Wall感謝。

0

方式一:

當前文件:

$ ls -l 
total 0 
-rw-r--r-- 1 guru None 0 Dec 1 09:14 a (2002).iso 
-rw-r--r-- 1 guru None 0 Dec 1 09:14 b_(2003_2).iso 

重命名文件:

$ (
> IFS="" 
> for i in * 
> do 
> mv "$i" $(echo $i | sed 's/\(.*\)(.*)\(.*\)/\1\2/') 
> done 
>) 

運行上面的命令後:

$ ls -l 
total 0 
-rw-r--r-- 1 guru None 0 Dec 1 09:14 a .iso 
-rw-r--r-- 1 guru None 0 Dec 1 09:14 b_.iso 
0

你可以這樣說:

for FILE in *; do 
    mv "$FILE" "${FILE%(*}${FILE##*)}" 
done 

這工作,因爲${FILE%(*}消除了(*從右邊最小的匹配,即一切,包括最後開括號後,而${FILE##*)}刪除的*)最大匹配從左邊開始,即包括最後右括號之前的所有內容。把它們結合起來,除了最後一個括號之外,你應該得到一切。即使任何文件名中還有其他括號,這也應該起作用。

請注意,這種腳本移動很棘手,可能會使您的文件名稱變得更糟。我建議在上面使用echo而不是mv來確認它對每一個文件都是正確的,首先。

而且雙引號也很重要,因爲您的文件名中有空格。

如果您想要在左括號之前刪除最後的空格,請將其包含在第一個模式中:${FILE% (*}

相關問題