下面是一個腳本,應該整理出來(要記得備份你的數據,你測試任何東西前):
#!/bin/bash
for i in Project*;
do
new=$(echo "$i" | sed 's/Project - \(\[.[^\[]*\]\)\(\[.[^\[]*\]\)\(\[.[^\[]*\]\)/Project - \2/')
mv "$i" "$new"
done
首先它需要的所有文件/文件與「Project
啓動目錄「在當前目錄和do
和done
之間的命令適用於每個文件:
- 獲取的文件/目錄名字符串(
$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。
請添加您想要查看的示例。我認爲你想要像'mv dirTemporada dir'和'mv「[xxxxx] [yyyy] [zzzz666]」xxxxyyyyxxx'(當[[xxxxx] [yyyy] [zzzz666]'有數字在任何部分之內。跳過如何處理文件'[xxxxx] [yyyy] [zzzz666] andSomethingOutsideBrackets' –
查看'rename'命令。至少有兩種不同的'rename'實現。 – Cyrus
添加到帖子中的示例。 –