2016-01-24 218 views
2

一堆我有一個目錄,看起來有點像這樣:bash腳本來重命名文件夾

drw-r--r-- 1 root root  0 Jan 24 17:26 -=1=-directoryname 
drw-r--r-- 1 root root  0 Jan 24 17:26 -=2=-directoryname 
drw-r--r-- 1 root root  0 Jan 24 17:26 -=3=-directoryname 
drw-r--r-- 1 root root  0 Jan 24 17:26 -=4=-directoryname 
drw-r--r-- 1 root root  0 Jan 24 17:26 -=5=-directoryname 

我想編寫一個腳本來從 -=1=- Folder#1 更改這些文件夾脫光「-=1=- 「部分,但唉,我沒有運氣。

任何人都可以幫我找到解決辦法嗎?

到目前爲止我的腳本已經失敗了我。

#!/bin/bash 
for i in {1..250} 
do 
     rename "-=$i=-" ""* 
     i=i+1 
done 

我已經使用了1..250,因爲有250個文件夾。

+0

'rename'命令是基於Perl還是相對簡單的C程序? –

+0

更新了問題,在剝離開始部分後,目錄名稱未由數字標識。我有重命名的珍珠版本。 – Tominos

+0

現在你有一個不同的問題;目錄名稱部分總是一樣嗎?你應該顯示' - = 1 = -directoryname'和' - = 2 = -nameofdirectory'和' - = 3 = -directory'和' - = 4 = -name'或者其他類似的區別,以使它更清晰處理。如果你有Perl'rename'(Perl中沒有'a'),那麼我的答案可以被修改;例如,只需將glob更改爲' - = * = - *'。如果沒有空格,請從'/ /'命令正則表達式中刪除空格。等 –

回答

1

提供的電話號碼,你可以製造的名稱和使用mv命令:

#!/bin/bash 
for i in {1..250} 
do 
    mv "-=$i=- Folder#$i" "Folder#$i" 
done 

隨着基於Perl的rename命令(有時稱爲prename),你可以使用:

rename 's/-=\d+=- //' -=*=-*Folder#* 

或者,考慮到修改後的問題(信息模式未固定後):

rename 's/-=\d+=- //' -=*=-* 

這工作!你能解釋它是如何工作的嗎?什麼是\d+

\d爲數字0 .. 9 Perl的正則表達式的符號。 +修飾符指示'一個或多個'。所以,s/-=\d+=- //的正則表達式部分尋找一個負號,一個等號,一個或多個數字,一個等號,一個負號和一個空格。替換部分將所有匹配的材料轉換爲空字符串。它全部被單引號括起來,所以shell保持獨立(儘管在替換命令中只有反斜槓是一個shell元字符,但是如果省略了引號,則反斜槓和空格將需要保護)。


我不知道你會如何使用基於C-rename命令這份工作;它比基於Perl的版本強大得多。

+0

重命名'/ - = \ d + = - //' - = * = - *這工作!你能解釋它是如何工作的嗎? \ d +爲什麼? – Tominos

相關問題