2016-02-07 42 views
1

我兩個問題:桑達COMAND重命名(包含[]之間的部分)的文件夾名稱

  1. 首先,我該如何使用sed命令適用勿在文件名中的文件夾的變化? 我試過你的easy命令sed -i -e 's/Temporada//g' f但是不起作用。
  2. 我正在嘗試使用sed命令重命名文件夾和文件名,其中包含至少三個部分,如[xxxxx] [yyyyy] [zzzzz987],但我只想刪除不包含數字的文件夾和文件名。我很迷茫如何使用正則表達式來定義它,如何區分[]部分以及如何區分包含數字的部分。

產地

項目 - [企業] [Date.02022016] [DBB XXXXX]

結果

項目 - [日期.02022016]

在此先感謝

+0

請添加您想要查看的示例。我認爲你想要像'mv dirTemporada dir'和'mv「[xxxxx] [yyyy] [zzzz666]」xxxxyyyyxxx'(當[[xxxxx] [yyyy] [zzzz666]'有數字在任何部分之內。跳過如何處理文件'[xxxxx] [yyyy] [zzzz666] andSomethingOutsideBrackets' –

+0

查看'rename'命令。至少有兩種不同的'rename'實現。 – Cyrus

+0

添加到帖子中的示例。 –

回答

1

下面是一個腳本,應該整理出來(要記得備份你的數據,你測試任何東西前):

#!/bin/bash 

for i in Project*; 
do  
     new=$(echo "$i" | sed 's/Project - \(\[.[^\[]*\]\)\(\[.[^\[]*\]\)\(\[.[^\[]*\]\)/Project - \2/') 
     mv "$i" "$new" 
done 

首先它需要的所有文件/文件與「Project啓動目錄「在當前目錄和dodone之間的命令適用於每個文件:

  • 獲取的文件/目錄名字符串($i)和應用所需的字符串修改,將新字符串保存在新變量$new中。
  • 然後它將舊文件/目錄($i)移動/重命名爲新文件($new)。

看到輸出:

[email protected]:~/tmp/temp$ ls -l 
total 8 
-rw-r--r-- 1 xtd8865 users 0 Feb 7 13:34 Project\ -\ [Enterprise][Date.01032015][DBB\ fda] 
-rw-r--r-- 1 xtd8865 users 0 Feb 7 13:34 Project\ -\ [Enterprise][Date.03032015][DBB\ dfada] 
-rw-r--r-- 1 xtd8865 users 0 Feb 7 13:34 Project\ -\ [Enterprise][Date.04032015][DBB\ afdad] 
drwxr-xr-x 2 xtd8865 users 4096 Feb 7 13:34 Project\ -\ [Enterprise][Date.3234223][DBB\ dafa]/ 
-rwxr-xr-x 1 xtd8865 users 169 Feb 7 13:35 script.sh* 
[email protected]:~/tmp/temp$ ./script.sh 
Project - [Enterprise][Date.01032015][DBB fda] 
Project - [Enterprise][Date.03032015][DBB dfada] 
Project - [Enterprise][Date.04032015][DBB afdad] 
Project - [Enterprise][Date.3234223][DBB dafa] 
[email protected]:~/tmp/temp$ ls -l 
total 8 
-rw-r--r-- 1 xtd8865 users 0 Feb 7 13:34 Project\ -\ [Date.01032015] 
-rw-r--r-- 1 xtd8865 users 0 Feb 7 13:34 Project\ -\ [Date.03032015] 
-rw-r--r-- 1 xtd8865 users 0 Feb 7 13:34 Project\ -\ [Date.04032015] 
drwxr-xr-x 2 xtd8865 users 4096 Feb 7 13:34 Project\ -\ [Date.3234223]/ 
-rwxr-xr-x 1 xtd8865 users 169 Feb 7 13:35 script.sh* 

正如你所看到的,它會重命名文件和目錄。

sed命令本身使用sed的反向引用功能。有關反向參考的更多信息可以發現,例如here

+1

你不加引號地使用變量'「$ i」'會對許多真實世界的文件名造成破壞。 – tripleee

+0

輸出中的反斜槓看起來很奇怪,並且與OP的示例不匹配。 – tripleee

+1

謝謝 - 修復。 – sycamorex

相關問題