bash - 查找和替换文件名递归忽略文件夹
问题描述
我正在尝试对文件夹和所有子文件夹内的一大组文件中的文件名进行规范化。我对这个命令的成功有限
find ./ -type f -name "*.txt" -print0 | xargs -0 rename 's/bob.smith/bob smith /' {} \;
此命令按预期工作,除非文件夹名称中存在“bob.smith”,其中存在文件名中包含“bob.smith”的文件。在这种情况下,我会收到以下信息:
Can't rename ./today.bob.smith.ok/1.bob.smith.344.txt ./today.bob smith.ok/1.bob.smith.344.txt: No such file or directory
解决方案
这应该有效:
find ./ -type f -name "*.txt" -print0 | xargs -0 rename 's/bob\.smith([^\/]+)$/bob smith $1/' {} \;
我修改了正则表达式以识别那些bob.smith
没有/
在他们之后的人,并且我使用了正则表达式分组((regex)
和$1
),所以我不会丢失之后的内容bob.smith
。
请注意,既然你写了s/bob.smith/
而不是s/bob.smith./
我假设你想要.
after bob.smith
。结果如下所示:
1.bob smith .344.txt
另请注意,bob\.smith
而不是bob.smith
。在正则表达式.
中表示“任何字符”。
推荐阅读
- javascript - 在我创建的所有新项目中,我无法修复 vscode 的 JSHint 插件中的“let”警告
- python - 匹配并替换括号内的任何文本,前提是给定的单词在括号内
- r - 具有不同组选择名称的闪亮选项卡
- php - PHP拆分字符串数字和特殊字符
- python-3.x - 如何从 XGBoostRegressor 获得可重现的结果?random_state 没有效果
- scala - JUnit 4.12 - 在 Scala 2.11 中获取测试名称
- java - 无法从数据库spring boot中检索数据
- vb.net - VB.Net战争游戏
- excel - 遍历子目录并打开这些目录中的文件
- reactjs - onImageLoad 回调反应 js