2016-02-07 64 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

相关问题