繁体   English   中英

使用正则表达式查找和重命名文件/文件夹

[英]Find and rename files/folders using regex

我试图为以I0 [0-9] [0-9]-开头的文件名找到正确的正则表达式,例如:“ I097-”。 我不熟悉正则表达式,但是在网上使用时,我想到了这个[I] [0] [\\ d] [\\ d] [-],我确定这不是我拥有的字符串的最佳正则表达式模式,但是我使用在线正则表达式工具进行了测试,并且可以正常工作。 现在,我想使用Linux'find'查找所有与此正则表达式匹配的文件,并通过将匹配字符串替换为空来重命名结果文件。

From:
I071-PTEN-7
./I071-PTEN-7/I071-PTEN-7.txt

To:
PTEN-7
./PTEN-7/PTEN-7.txt

command used:
find . -name "I0*" -type f -o -name "I0*" -type d -exec rename -n "s/[I][0][\d][\d][-]/''/" {} \;

但是它似乎无能为力,不确定发生了什么。 任何发现问题或解决方案的帮助将不胜感激。 谢谢。

使用-execdir选项可仅find文件名条目,也无需在正则表达式中的每个字符周围使用字符类。

find . -name 'I0*' -execdir rename -n 's/^I0\d\d-//' {} \;

如果rename不起作用,则可以尝试以下操作:

find . -type f -name 'I0*' -execdir bash -c 'mv "$1" "${1/I0[0-9][0-9]-/}"' - {} \; &&
find . -name 'I0*' -execdir bash -c 'mv "$1" "${1/I0[0-9][0-9]-/}"' - {} \;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM