0

我刚从 Windows 8 出来,现在遇到了一个大问题。我现在在 Ubuntu 12.10 上使用 FileHistory 将数据备份到外部硬盘驱动器,现在除了在文件名中附加时间戳之外,我的所有文件都已备份。

我需要删除以“(2012_”开头并以“)”结尾的括号之间的所有内容。

谁能帮我这个?这是我要修复的文件列表的屏幕截图:

https://dl.dropbox.com/u/2526790/Screenshot%20from%202012-11-30%2021%3A19%3A06.png

任何帮助将不胜感激。

谢谢,

4

3 回答 3

0

这个怎么样?

rename 's/\s\([^\)]+\)//' *.*

我们可以为此感谢拉里沃尔。

于 2012-12-02T15:40:41.697 回答
0

单程:

当前文件:

$ ls -l
total 0
-rw-r--r-- 1 guru None 0 Dec  1 09:14 a (2002).iso
-rw-r--r-- 1 guru None 0 Dec  1 09:14 b_(2003_2).iso

重命名文件:

$ (
> IFS=""
> for i in *
> do
>  mv "$i" $(echo $i | sed 's/\(.*\)(.*)\(.*\)/\1\2/')
> done
> )

运行上述命令后:

$ ls -l
total 0
-rw-r--r-- 1 guru None 0 Dec  1 09:14 a .iso
-rw-r--r-- 1 guru None 0 Dec  1 09:14 b_.iso
于 2012-12-01T03:46:25.610 回答
0

你可以这样做:

for FILE in *; do
    mv "$FILE" "${FILE%(*}${FILE##*)}"
done

这是因为从右边${FILE%(*}删除了最小的匹配项,即包括最后一个左括号和之后的所有内容,而从左边删除了最大的匹配项,即包括最后一个右括号之前的所有内容。结合它们,您应该得到除了最后一个括号之外的所有内容。即使任何文件名中也有其他括号,这也应该有效。(*${FILE##*)}*)

请注意,这种脚本移动很棘手,可能会搞砸您的文件名。我建议首先在上面使用echo而不是mv确认它确实对每个文件都做了正确的事情。

双引号也很重要,因为文件名中有空格。

如果您也想删除左括号之前的最后一个空格,只需将其包含在第一个模式中:${FILE% (*}.

于 2012-12-01T04:01:17.863 回答