我正在尝试为以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][-]/''/" {} \;
但是它似乎什么也没做,不确定发生了什么。任何发现问题或解决方案的帮助将不胜感激。谢谢。
答案 0 :(得分:2)
使用-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]-/}"' - {} \;