下面是一个脚本,应该整理出来(要记得备份你的数据,你测试任何东西前):
#!/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
添加到帖子中的示例。 –