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]-/}"' - {} \;
推荐阅读
- python - 为什么我不能向 Django 中的对象添加多对多关系?
- swift - api返回的数据总是nil?
- c++ - 在 z 之后循环回到字母表的开头
- c - 将函数传递给函数 C
- linux - 为什么用户可以使用 passwd 更改他们的密码,即使他们不能直接写入 /etc/shadow 文件?
- javafx - 如何在 JavaFX 中获取详细的打印机信息
- javascript - 仅在输入两个或更多字符时触发 AJAX
- python - Numpy 的按位与对矩阵的行为不同错误
- reactjs - 当child是react组件而不是DOM元素时如何调整react.children的onClick事件
- python - 在给定的一组多边形内找到一组给定的点的矢量化实现