如何从文件夹中的文件名中删除一些文本?
我目前正在尝试:
rename s/"NEWER_(.*?)"//g *
但没有什么被重新命名
我有一个父文件夹,里面有一堆子文件夹,里面都是文件,OneDrive 认为在其上附加“ (NEWER_timestamp)”是个好主意,但我想将其删除。
文件名示例:
getyou.ico (NEWER_1417529079.87)
o7pm.ico (NEWER_1417529184.89)
o7th.ico (NEWER_1417529135.81)
答案1
请尝试以下操作:
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
- All
[^/]*(.*) .*$
仅匹配路径中不包含 的最后一部分/
。并且 - 在上面的正则表达式中,是一组匹配最后一个 之后和空格 之前的
(.*)
所有内容的组。它的反向引用将是。/
$1
.*$
$
匹配文件名末尾空格后的所有内容。- 最后,在重命名的替换部分,我们只保留最后一个和一个空格
s/.../REPLACEMENT/
之间的匹配组,称为匹配组。\
(.*)
答案2
您应该考虑在正则表达式之外使用引号(在内部,它们将被视为引号),然后转义(
。尝试;
rename -n 's/ \(NEWER_\d{10}.\d{2}\)$//' *NEWER*
表达的精确度可能不是必需的,但是在修改文件时不能太谨慎。