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完全替换了不匹配的通配符。