Answers:
请尝试以下操作:
find /path/to/parrent-dir -type f -exec rename -n 's:[^/]*(.*) .*$:$1:' {} +
./o7th.ico (NEWER_1417529135.81) renamed as /o7th.ico
./sub-dir (NEWER_1417529135.81)/getyou.ico (NEWER_1417529079.87) renamed as /sub-dir (NEWER_1417529135.81)/getyou.ico
./sub-dir (NEWER_1417529135.81)/o7pm.ico (NEWER_1417529184.89) renamed as /sub-dir (NEWER_1417529135.81)/o7pm.ico
./getyou.ico (NEWER_1417529079.87) renamed as /getyou.ico
./o7pm.ico (NEWER_1417529184.89) renamed as /o7pm.ico
[^/]*(.*) .*$
仅匹配不包含的路径的最后一部分/
。和(.*)
是一组匹配所有在最后/
一个空格之后和一个空格之前的字符
。其后向引用将为$1
。.*$
将所有内容与$
文件名末尾的空格匹配。s/.../REPLACEMENT/
,我们只保留了last \
和与之匹配的空间之间的匹配组(.*)
。您应该考虑使用正则表达式外的引号(在内部,它们实际上是引号),然后转义(
。尝试;
rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*
表达式的精度可能不是必需的,但是在修改文件时不要太谨慎。
reading filenames from STDIN
我已经在所有这些文件所在的“父”文件夹中
*NEWER*
找不到任何扩展,shell会照原样保留,因此您一定犯了一个错误,或者使用的shell完全替换了不匹配的通配符。