我刚刚来自Windows 8,现在有一个很大的问题。我现在使用Ubuntu 12.10我使用FileHistory将我的数据备份到外部硬盘驱动器,现在除了在文件名中附加时间戳之外,我的所有文件都已备份。
我需要删除以“(2012_”开头,以“)结束”的括号之间的所有内容。
任何人都可以帮我吗?这是我正在尝试修复的文件列表的屏幕截图:
https://dl.dropbox.com/u/2526790/Screenshot%20from%202012-11-30%2021%3A19%3A06.png
非常感谢任何帮助。
谢谢,
答案 0 :(得分: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
答案 1 :(得分:0)
你可以这样做:
for FILE in *; do
mv "$FILE" "${FILE%(*}${FILE##*)}"
done
这是有效的,因为${FILE%(*}
从右边删除(*
的最小匹配,即包括和在最后一个左括号之后的所有内容,而${FILE##*)}
删除*)
的最大匹配从左边开始,即包括和最后一个右括号之前的所有内容。结合它们,你应该得到除最后一个括号之外的所有东西。即使任何文件名中还包含其他括号,这也应该有效。
请注意,这种脚本移动很棘手,可能会阻止您的文件名。我建议在上面使用echo
而不是mv
来确认它是否真的为每个文件做了正确的事情,首先。
双引号也很重要,因为文件名中有空格。
如果您想在开括号前删除最后一个空格,只需将其包含在第一个模式中:${FILE% (*}
。
答案 2 :(得分:0)
这个怎么样?
rename 's/\s\([^\)]+\)//' *.*
我们可以感谢Larry Wall。